aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.editorconfig6
-rw-r--r--.gitignore3
-rw-r--r--.travis.yml2
-rw-r--r--Dockerfile24
-rw-r--r--Vagrantfile31
-rwxr-xr-xbin/qmk97
l---------bin/qmk-compile-json1
l---------bin/qmk-doctor1
l---------bin/qmk-hello1
l---------bin/qmk-json-keymap1
-rw-r--r--bootloader.mk4
-rw-r--r--build_json.mk27
-rw-r--r--build_keyboard.mk61
-rw-r--r--common_features.mk10
-rw-r--r--docs/_summary.md5
-rw-r--r--docs/cli.md31
-rw-r--r--docs/coding_conventions_c.md58
-rw-r--r--docs/coding_conventions_python.md314
-rw-r--r--docs/config_options.md5
-rw-r--r--docs/contributing.md58
-rw-r--r--docs/faq_build.md10
-rw-r--r--docs/faq_debug.md1
-rw-r--r--docs/feature_advanced_keycodes.md16
-rw-r--r--docs/feature_backlight.md8
-rw-r--r--docs/feature_combo.md32
-rw-r--r--docs/feature_encoders.md1
-rw-r--r--docs/feature_oled_driver.md2
-rw-r--r--docs/feature_space_cadet.md1
-rw-r--r--docs/feature_split_keyboard.md185
-rw-r--r--docs/feature_unicode.md68
-rw-r--r--docs/features.md1
-rw-r--r--docs/flashing.md25
-rw-r--r--docs/getting_started_vagrant.md46
-rw-r--r--docs/i2c_driver.md20
-rw-r--r--docs/newbs_flashing.md4
-rw-r--r--docs/python_development.md45
-rw-r--r--drivers/arm/i2c_master.c15
-rw-r--r--drivers/arm/i2c_master.h66
-rwxr-xr-xdrivers/avr/i2c_master.c15
-rwxr-xr-xdrivers/avr/i2c_master.h15
-rwxr-xr-xdrivers/avr/i2c_slave.c17
-rwxr-xr-xdrivers/avr/i2c_slave.h17
-rw-r--r--drivers/qwiic/qwiic.mk4
-rw-r--r--keyboards/1upkeyboards/1up60hse/rules.mk1
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c9
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c9
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c9
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/michel/config.h13
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/michel/keymap.c8
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/michel/rules.mk3
-rw-r--r--keyboards/40percentclub/half_n_half/rules.mk1
-rw-r--r--keyboards/6ball/rules.mk1
-rw-r--r--keyboards/9key/rules.mk1
-rw-r--r--keyboards/abstract/ellipse/rev1/config.h6
-rw-r--r--keyboards/adkb96/rules.mk1
-rw-r--r--keyboards/ai03/lunar/keymaps/via/rules.mk3
-rw-r--r--keyboards/ai03/lunar/rules.mk1
-rw-r--r--keyboards/ai03/orbit/rules.mk1
-rw-r--r--keyboards/al1/keymaps/default/keymap.c17
-rw-r--r--keyboards/al1/keymaps/splitbs/keymap.c16
-rw-r--r--keyboards/al1/rules.mk3
-rw-r--r--keyboards/alf/dc60/keymaps/default/keymap.c16
-rw-r--r--keyboards/alf/dc60/rules.mk1
-rw-r--r--keyboards/alf/x11/info.json209
-rw-r--r--keyboards/alf/x11/keymaps/default/keymap.c77
-rw-r--r--keyboards/alf/x11/rules.mk1
-rw-r--r--keyboards/alf/x11/x11.c67
-rw-r--r--keyboards/alf/x11/x11.h26
-rw-r--r--keyboards/alf/x2/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/alu84/keymaps/default/keymap.c9
-rwxr-xr-xkeyboards/amj40/keymaps/default/keymap.c10
-rwxr-xr-xkeyboards/amj40/rules.mk2
-rw-r--r--keyboards/amj60/keymaps/iso_split_rshift/keymap.c22
-rw-r--r--keyboards/amj60/rules.mk4
-rw-r--r--keyboards/amj96/keymaps/default/keymap.c16
-rw-r--r--keyboards/amj96/rules.mk1
-rw-r--r--keyboards/amjpad/rules.mk2
-rw-r--r--keyboards/angel64/angel64.c51
-rw-r--r--keyboards/angel64/angel64.h48
-rw-r--r--keyboards/angel64/config.h242
-rw-r--r--keyboards/angel64/info.json12
-rw-r--r--keyboards/angel64/keymaps/default/config.h19
-rw-r--r--keyboards/angel64/keymaps/default/keymap.c58
-rw-r--r--keyboards/angel64/keymaps/default/readme.md1
-rw-r--r--keyboards/angel64/matrix.c287
-rw-r--r--keyboards/angel64/readme.md15
-rw-r--r--keyboards/angel64/rules.mk83
-rw-r--r--keyboards/atom47/keymaps/LEdiodes/rules.mk1
-rw-r--r--keyboards/atom47/rules.mk1
-rw-r--r--keyboards/atomic/keymaps/default/keymap.c23
-rw-r--r--keyboards/atomic/rules.mk5
-rw-r--r--keyboards/atreus/keymaps/default/keymap.c14
-rw-r--r--keyboards/atreus62/keymaps/default/keymap.c15
-rw-r--r--keyboards/atreus62/rules.mk2
-rw-r--r--keyboards/baguette/rules.mk1
-rw-r--r--keyboards/bantam44/keymaps/default/keymap.c5
-rw-r--r--keyboards/bantam44/rules.mk3
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c4
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/lock/keymap.c4
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/tester/keymap.c4
-rwxr-xr-xkeyboards/bigseries/2key/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/bigseries/2key/keymaps/lock/keymap.c4
-rwxr-xr-xkeyboards/bigseries/2key/keymaps/tester/keymap.c4
-rwxr-xr-xkeyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c4
-rwxr-xr-xkeyboards/bigseries/3key/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/bigseries/3key/keymaps/tester/keymap.c4
-rwxr-xr-xkeyboards/bigseries/4key/keymaps/default/keymap.c4
-rwxr-xr-xkeyboards/bigseries/4key/keymaps/tester/keymap.c4
-rw-r--r--keyboards/blockey/rules.mk1
-rw-r--r--keyboards/boston_meetup/2019/config.h4
-rw-r--r--keyboards/bpiphany/frosty_flake/rules.mk1
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c16
-rw-r--r--keyboards/bpiphany/kitten_paw/rules.mk3
-rw-r--r--keyboards/bpiphany/tiger_lily/rules.mk1
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c16
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c16
-rw-r--r--keyboards/bpiphany/unloved_bastard/rules.mk1
-rw-r--r--keyboards/bthlabs/geekpad/rules.mk1
-rw-r--r--keyboards/business_card/rules.mk1
-rw-r--r--keyboards/cannonkeys/ortho75/config.h1
-rw-r--r--keyboards/cannonkeys/satisfaction75/config.h1
-rw-r--r--keyboards/cannonkeys/satisfaction75/i2c_master.c4
-rw-r--r--keyboards/cannonkeys/stm32f072/keyboard.c2
-rw-r--r--keyboards/catch22/keymaps/default/keymap.c5
-rw-r--r--keyboards/chimera_ergo/keymaps/default/keymap.c61
-rw-r--r--keyboards/chimera_ergo/rules.mk1
-rw-r--r--keyboards/chimera_ls/rules.mk1
-rw-r--r--keyboards/chimera_ortho/rules.mk1
-rw-r--r--keyboards/christmas_tree/rules.mk1
-rwxr-xr-xkeyboards/ckeys/handwire_101/rules.mk1
-rw-r--r--keyboards/ckeys/nakey/keymaps/default/keymap.c15
-rw-r--r--keyboards/ckeys/nakey/rules.mk1
-rw-r--r--keyboards/ckeys/obelus/rules.mk1
-rw-r--r--keyboards/claw44/rules.mk1
-rw-r--r--keyboards/clueboard/66_hotswap/keymaps/json/keymap.json1
-rw-r--r--keyboards/comet46/rules.mk1
-rw-r--r--keyboards/converter/hp_46010a/rules.mk1
-rw-r--r--keyboards/converter/ibm_5291/rules.mk1
-rw-r--r--keyboards/converter/modelm101/rules.mk1
-rw-r--r--keyboards/crkbd/keymaps/default/rules.mk21
-rw-r--r--keyboards/crkbd/keymaps/vxid/README.md3
-rw-r--r--keyboards/crkbd/keymaps/vxid/config.h44
-rw-r--r--keyboards/crkbd/keymaps/vxid/keymap.c85
-rw-r--r--keyboards/crkbd/keymaps/vxid/rules.mk31
-rw-r--r--keyboards/crkbd/rev1/rev1.c7
-rw-r--r--keyboards/crkbd/rules.mk7
-rw-r--r--keyboards/cu24/keymaps/default/keymap.c16
-rw-r--r--keyboards/cu24/rules.mk1
-rw-r--r--keyboards/cu75/keymaps/default/keymap.c9
-rw-r--r--keyboards/cu75/keymaps/iso/keymap.c9
-rw-r--r--keyboards/daisy/rules.mk3
-rw-r--r--keyboards/dc01/arrow/rules.mk3
-rw-r--r--keyboards/dc01/left/rules.mk1
-rw-r--r--keyboards/dc01/numpad/rules.mk1
-rw-r--r--keyboards/dc01/right/rules.mk3
-rw-r--r--keyboards/deltasplit75/rules.mk1
-rwxr-xr-xkeyboards/dichotomy/rules.mk1
-rw-r--r--keyboards/diverge3/rules.mk2
-rw-r--r--keyboards/divergetm2/rules.mk3
-rw-r--r--keyboards/do60/keymaps/default/keymap.c15
-rw-r--r--keyboards/do60/keymaps/test/keymap.c15
-rw-r--r--keyboards/donutcables/scrabblepad/keymaps/default/keymap.c16
-rw-r--r--keyboards/doro67/regular/rules.mk1
-rw-r--r--keyboards/doro67/rgb/rules.mk1
-rw-r--r--keyboards/dozen0/rules.mk1
-rw-r--r--keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c4
-rw-r--r--keyboards/duck/jetfire/keymaps/default/keymap.c16
-rw-r--r--keyboards/duck/jetfire/rules.mk1
-rw-r--r--keyboards/duck/lightsaver/keymaps/default/keymap.c4
-rw-r--r--keyboards/dz60/dz60.h27
-rw-r--r--keyboards/dz60/info.json6
-rw-r--r--keyboards/dz60/keymaps/billiams/keymap.c8
-rw-r--r--keyboards/dz60/keymaps/billiams/readme.md8
-rw-r--r--keyboards/dz60/keymaps/mpaarating/keymap.c24
-rw-r--r--keyboards/dz60/keymaps/mpaarating/readme.md12
-rw-r--r--keyboards/dz60/keymaps/weeheavy_2.25_lshift/README.md53
-rw-r--r--keyboards/dz60/keymaps/weeheavy_2.25_lshift/keymap.c30
-rw-r--r--keyboards/dztech/dz60rgb/keymaps/matthewrobo/keymap.c2
-rw-r--r--keyboards/eco/rules.mk3
-rw-r--r--keyboards/ep/96/rules.mk1
-rw-r--r--keyboards/ergo42/rules.mk1
-rw-r--r--keyboards/ergodash/rev1/info.json373
-rw-r--r--keyboards/ergodash/rev1/rev1.h163
-rw-r--r--keyboards/ergodone/keymaps/default/keymap.c18
-rw-r--r--keyboards/ergodox_ez/keymaps/default_osx/keymap.c15
-rw-r--r--keyboards/ergodox_ez/keymaps/testing/keymap.c13
-rw-r--r--keyboards/ergodox_ez/rules.mk6
-rw-r--r--keyboards/ergodox_infinity/keymaps/default/keymap.c18
-rw-r--r--keyboards/ergoinu/rules.mk1
-rw-r--r--keyboards/ergotravel/rules.mk2
-rw-r--r--keyboards/espectro/info.json111
-rw-r--r--keyboards/evil80/rules.mk1
-rw-r--r--keyboards/exclusive/e6v2/le/rules.mk3
-rw-r--r--keyboards/exclusive/e6v2/oe/rules.mk3
-rw-r--r--keyboards/exclusive/e6v2/oe_bmc/rules.mk1
-rw-r--r--keyboards/felix/config.h218
-rw-r--r--keyboards/felix/felix.h5
-rw-r--r--keyboards/felix/info.json23
-rw-r--r--keyboards/felix/keymaps/default/keymap.c25
-rw-r--r--keyboards/felix/readme.md2
-rw-r--r--keyboards/felix/rules.mk38
-rw-r--r--keyboards/fleuron/rules.mk3
-rw-r--r--keyboards/fortitude60/rules.mk1
-rw-r--r--keyboards/gh60/gh60.c24
-rw-r--r--keyboards/gh60/gh60.h91
-rw-r--r--keyboards/gh60/info.json410
-rw-r--r--keyboards/gh60/keymaps/bluezio/rules.mk1
-rw-r--r--keyboards/gh60/keymaps/dbroqua/rules.mk1
-rw-r--r--keyboards/gh60/keymaps/dbroqua_7U/rules.mk1
-rw-r--r--keyboards/gh60/keymaps/default/keymap.c63
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/rules.mk1
-rw-r--r--keyboards/gh60/readme.md2
-rw-r--r--keyboards/gh60/rules.mk3
-rw-r--r--keyboards/gingham/config.h250
-rw-r--r--keyboards/gingham/gingham.c40
-rw-r--r--keyboards/gingham/gingham.h49
-rw-r--r--keyboards/gingham/info.json15
-rw-r--r--keyboards/gingham/keymaps/default/keymap.c60
-rw-r--r--keyboards/gingham/keymaps/default/readme.md6
-rw-r--r--keyboards/gingham/keymaps/iso/keymap.c60
-rw-r--r--keyboards/gingham/keymaps/iso/readme.md6
-rw-r--r--keyboards/gingham/matrix.c247
-rw-r--r--keyboards/gingham/readme.md22
-rw-r--r--keyboards/gingham/rules.mk93
-rw-r--r--keyboards/gingham/usbconfig.h397
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/keymap.c6
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/rules.mk1
-rw-r--r--keyboards/gray_studio/cod67/keymaps/default/keymap.c16
-rw-r--r--keyboards/gray_studio/cod67/rules.mk1
-rw-r--r--keyboards/hadron/ver2/keymaps/default/keymap.c34
-rw-r--r--keyboards/hadron/ver2/rules.mk3
-rw-r--r--keyboards/hadron/ver3/config.h1
-rw-r--r--keyboards/hadron/ver3/keymaps/default/keymap.c32
-rw-r--r--keyboards/halberd/config.h7
-rw-r--r--keyboards/handwired/108key_trackpoint/rules.mk1
-rw-r--r--keyboards/handwired/412_64/keymaps/default/keymap.c11
-rw-r--r--keyboards/handwired/6macro/6macro.c16
-rw-r--r--keyboards/handwired/6macro/6macro.h35
-rw-r--r--keyboards/handwired/6macro/config.h70
-rw-r--r--keyboards/handwired/6macro/info.json13
-rw-r--r--keyboards/handwired/6macro/keymaps/default/config.h18
-rw-r--r--keyboards/handwired/6macro/keymaps/default/keymap.c56
-rw-r--r--keyboards/handwired/6macro/keymaps/default/readme.md15
-rw-r--r--keyboards/handwired/6macro/keymaps/osu/config.h18
-rw-r--r--keyboards/handwired/6macro/keymaps/osu/keymap.c56
-rw-r--r--keyboards/handwired/6macro/keymaps/osu/readme.md15
-rw-r--r--keyboards/handwired/6macro/readme.md15
-rw-r--r--keyboards/handwired/6macro/rules.mk81
-rw-r--r--keyboards/handwired/arrow_pad/rules.mk5
-rw-r--r--keyboards/handwired/atreus50/rules.mk3
-rw-r--r--keyboards/handwired/dactyl/keymaps/default/keymap.c18
-rw-r--r--keyboards/handwired/dactyl_manuform/rules.mk1
-rw-r--r--keyboards/handwired/dactyl_promicro/rules.mk1
-rw-r--r--keyboards/handwired/daishi/config.h3
-rw-r--r--keyboards/handwired/downbubble/rules.mk1
-rw-r--r--keyboards/handwired/frenchdev/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/gamenum/keymaps/default/keymap.c5
-rw-r--r--keyboards/handwired/hacked_motospeed/rules.mk3
-rw-r--r--keyboards/handwired/jn68m/rules.mk1
-rw-r--r--keyboards/handwired/kbod/keymaps/default/keymap.c5
-rw-r--r--keyboards/handwired/kbod/rules.mk1
-rw-r--r--keyboards/handwired/lovelive9/rules.mk1
-rw-r--r--keyboards/handwired/mechboards_micropad/rules.mk1
-rw-r--r--keyboards/handwired/minorca/rules.mk3
-rw-r--r--keyboards/handwired/not_so_minidox/rules.mk1
-rw-r--r--keyboards/handwired/numbrero/readme.md2
-rw-r--r--keyboards/handwired/pilcrow/rules.mk1
-rw-r--r--keyboards/handwired/promethium/rules.mk7
-rw-r--r--keyboards/handwired/qc60/rules.mk1
-rwxr-xr-xkeyboards/handwired/reddot/rules.mk3
-rw-r--r--keyboards/handwired/retro_refit/rules.mk3
-rw-r--r--keyboards/handwired/terminus_mini/rules.mk1
-rw-r--r--keyboards/handwired/traveller/keymaps/default/keymap.c60
-rw-r--r--keyboards/handwired/traveller/rules.mk5
-rw-r--r--keyboards/handwired/woodpad/rules.mk1
-rw-r--r--keyboards/handwired/wulkan/README.md14
-rw-r--r--keyboards/handwired/wulkan/config.h23
-rw-r--r--keyboards/handwired/wulkan/info.json13
-rw-r--r--keyboards/handwired/wulkan/keymaps/default/keymap.c111
-rw-r--r--keyboards/handwired/wulkan/keymaps/default/rules.mk1
-rw-r--r--keyboards/handwired/wulkan/rules.mk22
-rw-r--r--keyboards/handwired/wulkan/wulkan.c6
-rw-r--r--keyboards/handwired/wulkan/wulkan.h21
-rw-r--r--keyboards/hecomi/alpha/rules.mk1
-rw-r--r--keyboards/hecomi/rules.mk1
-rw-r--r--keyboards/helix/rev1/keymaps/OLED_sample/keymap.c33
-rw-r--r--keyboards/helix/rules.mk1
-rw-r--r--keyboards/hhkb/keymaps/default/keymap.c19
-rw-r--r--keyboards/hhkb/rules.mk1
-rwxr-xr-xkeyboards/hid_liber/keymaps/default/keymap.c16
-rwxr-xr-xkeyboards/hid_liber/rules.mk1
-rw-r--r--keyboards/hifumi/rules.mk1
-rw-r--r--keyboards/hineybush/h87a/keymaps/default/keymap.c16
-rw-r--r--keyboards/hineybush/h87a/keymaps/gam3cat/keymap.c10
-rw-r--r--keyboards/hineybush/h87a/rules.mk3
-rw-r--r--keyboards/hineybush/hineyg80/rules.mk1
-rwxr-xr-xkeyboards/honeycomb/rules.mk1
-rw-r--r--keyboards/hs60/v1/rules.mk4
-rw-r--r--keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json10
-rw-r--r--keyboards/idobo/keymaps/greenshadowmaker/keymap.c82
-rw-r--r--keyboards/idobo/keymaps/greenshadowmaker/readme.md2
-rw-r--r--keyboards/idobo/rules.mk1
-rw-r--r--keyboards/ivy/config.h67
-rw-r--r--keyboards/ivy/ivy.c1
-rw-r--r--keyboards/ivy/ivy.h7
-rw-r--r--keyboards/ivy/keymaps/default/keymap.c46
-rw-r--r--keyboards/ivy/keymaps/default/rules.mk22
-rw-r--r--keyboards/ivy/readme.md15
-rw-r--r--keyboards/ivy/rev1/config.h27
-rw-r--r--keyboards/ivy/rev1/rev1.c5
-rw-r--r--keyboards/ivy/rev1/rev1.h14
-rw-r--r--keyboards/ivy/rev1/rules.mk3
-rw-r--r--keyboards/ivy/rules.mk66
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c8
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk1
-rw-r--r--keyboards/jc65/v32u4/rules.mk1
-rw-r--r--keyboards/jd40/rules.mk5
-rw-r--r--keyboards/jd45/rules.mk5
-rw-r--r--keyboards/kagamidget/config.h5
-rw-r--r--keyboards/kagamidget/rules.mk3
-rw-r--r--keyboards/katana60/keymaps/default/keymap.c16
-rw-r--r--keyboards/katana60/rules.mk1
-rw-r--r--keyboards/kbdfans/kbd4x/rules.mk1
-rw-r--r--keyboards/kbdfans/kbd66/keymaps/ansi/keymap.c16
-rw-r--r--keyboards/kbdfans/kbd66/keymaps/default/keymap.c16
-rw-r--r--keyboards/kbdfans/kbd66/keymaps/iso/keymap.c16
-rw-r--r--keyboards/kbdfans/kbd66/rules.mk1
-rw-r--r--keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/config.h19
-rw-r--r--keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c79
-rw-r--r--keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/rules.mk6
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h18
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/keymap.c90
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/readme.md9
-rw-r--r--keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/rules.mk20
-rw-r--r--keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c17
-rw-r--r--keyboards/kbdfans/kbd6x/rules.mk1
-rw-r--r--keyboards/kbdfans/kbd75/keymaps/tucznak/config.h26
-rw-r--r--keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c90
-rw-r--r--keyboards/kbdfans/kbd75/keymaps/tucznak/readme.md5
-rw-r--r--keyboards/kbdfans/kbd75/keymaps/tucznak/rules.mk14
-rw-r--r--keyboards/kbdfans/kbd8x/keymaps/default/keymap.c16
-rw-r--r--keyboards/kbdfans/kbd8x/keymaps/default_backlighting/keymap.c16
-rw-r--r--keyboards/kbdfans/kbd8x/rules.mk1
-rw-r--r--keyboards/kc60/keymaps/default/keymap.c6
-rw-r--r--keyboards/kc60/rules.mk3
-rw-r--r--keyboards/kc60se/rules.mk1
-rw-r--r--keyboards/keebio/bdn9/config.h1
-rw-r--r--keyboards/keebio/bfo9000/rules.mk1
-rw-r--r--keyboards/keebio/iris/keymaps/jasonkrasavage/config.h (renamed from keyboards/winkeyless/bface/i2c.h)14
-rw-r--r--keyboards/keebio/iris/keymaps/jasonkrasavage/keymap.c44
-rw-r--r--keyboards/keebio/iris/keymaps/jasonkrasavage/rules.mk1
-rw-r--r--keyboards/keebio/iris/keymaps/mattly/config.h28
-rw-r--r--keyboards/keebio/iris/keymaps/mattly/keymap.c50
-rw-r--r--keyboards/keebio/iris/keymaps/mattly/readme.md1
-rw-r--r--keyboards/keebio/iris/keymaps/mattly/rules.mk0
-rw-r--r--keyboards/keebio/iris/keymaps/osiris/config.h33
-rw-r--r--keyboards/keebio/iris/keymaps/osiris/keymap.c141
-rw-r--r--keyboards/keebio/iris/keymaps/osiris/readme.md11
-rw-r--r--keyboards/keebio/iris/keymaps/osiris/rules.mk3
-rw-r--r--keyboards/keebio/iris/rev3/config.h1
-rw-r--r--keyboards/keebio/iris/rules.mk2
-rw-r--r--keyboards/keebio/laplace/rules.mk1
-rw-r--r--keyboards/keebio/nyquist/rules.mk5
-rw-r--r--keyboards/keyhive/maypad/config.h246
-rw-r--r--keyboards/keyhive/maypad/info.json16
-rw-r--r--keyboards/keyhive/maypad/keymaps/default/config.h19
-rw-r--r--keyboards/keyhive/maypad/keymaps/default/keymap.c40
-rw-r--r--keyboards/keyhive/maypad/keymaps/default/readme.md1
-rw-r--r--keyboards/keyhive/maypad/maypad.c51
-rw-r--r--keyboards/keyhive/maypad/maypad.h61
-rw-r--r--keyboards/keyhive/maypad/readme.md13
-rw-r--r--keyboards/keyhive/maypad/rules.mk82
-rw-r--r--keyboards/kinesis/keymaps/default/keymap.c16
-rw-r--r--keyboards/kinesis/keymaps/default_pretty/keymap.c16
-rw-r--r--keyboards/kinesis/keymaps/tw1t611/keymap.c36
-rw-r--r--keyboards/kinesis/keymaps/tw1t611/readme.md2
-rw-r--r--keyboards/kinesis/rules.mk3
-rw-r--r--keyboards/kira75/keymaps/default/keymap.c16
-rw-r--r--keyboards/kira75/rules.mk1
-rw-r--r--keyboards/kmac/rules.mk1
-rw-r--r--keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c109
-rw-r--r--keyboards/knops/mini/keymaps/default/keymap.c71
-rw-r--r--keyboards/knops/mini/rules.mk1
-rw-r--r--keyboards/kona_classic/keymaps/ansi/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_arrows/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_arrows_lcap/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_split/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/ansi_split_arrows/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/default/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/iso/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/iso_arrows/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/iso_split/keymap.c3
-rw-r--r--keyboards/kona_classic/keymaps/iso_split_arrows/keymap.c3
-rw-r--r--keyboards/laptreus/rules.mk2
-rw-r--r--keyboards/launchpad/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/keymap.c34
-rw-r--r--keyboards/lets_split_eh/rules.mk1
-rw-r--r--keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c9
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c10
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c10
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c10
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c10
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c10
-rw-r--r--keyboards/lfkeyboards/lfkpad/keymaps/default/keymap.c10
-rw-r--r--keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c10
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/default/keymap.c9
-rw-r--r--keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c10
-rw-r--r--keyboards/lily58/rules.mk1
-rw-r--r--keyboards/m10a/keymaps/gam3cat/keymap.c6
-rw-r--r--keyboards/m10a/keymaps/gam3cat/rules.mk1
-rw-r--r--keyboards/m10a/rules.mk1
-rw-r--r--keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c2
-rw-r--r--keyboards/maxr1998/pulse4k/config.h1
-rw-r--r--keyboards/mechkeys/mk60/rules.mk3
-rw-r--r--keyboards/mechllama/g35/config.h39
-rw-r--r--keyboards/mechllama/g35/g35.c16
-rw-r--r--keyboards/mechllama/g35/g35.h33
-rw-r--r--keyboards/mechllama/g35/info.json13
-rw-r--r--keyboards/mechllama/g35/keymaps/default/keymap.c72
-rw-r--r--keyboards/mechllama/g35/keymaps/default/readme.md4
-rw-r--r--keyboards/mechllama/g35/readme.md15
-rw-r--r--keyboards/mechllama/g35/rules.mk14
-rw-r--r--keyboards/mechllama/g35/v1/config.h25
-rw-r--r--keyboards/mechllama/g35/v1/rules.mk0
-rw-r--r--keyboards/mechllama/g35/v2/config.h25
-rw-r--r--keyboards/mechllama/g35/v2/rules.mk0
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/default/keymap.c9
-rw-r--r--keyboards/meira/keymaps/default/keymap.c16
-rw-r--r--keyboards/meira/rules.mk1
-rw-r--r--keyboards/meishi/rules.mk1
-rw-r--r--keyboards/meishi2/config.h250
-rw-r--r--keyboards/meishi2/info.json0
-rw-r--r--keyboards/meishi2/keymaps/default/config.h19
-rw-r--r--keyboards/meishi2/keymaps/default/keymap.c (renamed from keyboards/winkeyless/bface/backlight_ps2avrGB.h)32
-rw-r--r--keyboards/meishi2/keymaps/default/readme.md1
-rw-r--r--keyboards/meishi2/meishi2.c51
-rw-r--r--keyboards/meishi2/meishi2.h34
-rw-r--r--keyboards/meishi2/readme.md15
-rw-r--r--keyboards/meishi2/rules.mk80
-rw-r--r--keyboards/melody96/config.h5
-rw-r--r--keyboards/melody96/info.json8
-rw-r--r--keyboards/melody96/keymaps/default/keymap.c4
-rw-r--r--keyboards/melody96/keymaps/default_std60_split_num0/keymap.c40
-rw-r--r--keyboards/melody96/keymaps/default_std60_split_num0/readme.md39
-rw-r--r--keyboards/melody96/keymaps/konstantin/keymap.c22
-rw-r--r--keyboards/melody96/melody96.c7
-rw-r--r--keyboards/melody96/melody96.h40
-rw-r--r--keyboards/melody96/readme.md2
-rw-r--r--keyboards/meme/rules.mk1
-rw-r--r--keyboards/miniaxe/rules.mk2
-rw-r--r--keyboards/minidox/rules.mk3
-rw-r--r--keyboards/mint60/keymaps/default/keymap.c16
-rw-r--r--keyboards/mint60/rules.mk1
-rw-r--r--keyboards/mitosis/keymaps/default/keymap.c105
-rw-r--r--keyboards/mitosis/rules.mk1
-rw-r--r--keyboards/miuni32/keymaps/default/keymap.c15
-rw-r--r--keyboards/miuni32/rules.mk1
-rw-r--r--keyboards/model01/keymaps/tw1t611/config.h19
-rw-r--r--keyboards/model01/keymaps/tw1t611/keymap.c50
-rw-r--r--keyboards/model01/keymaps/tw1t611/readme.md5
-rw-r--r--keyboards/model01/rules.mk4
-rw-r--r--keyboards/mxss/keymaps/default/keymap.c16
-rw-r--r--keyboards/mxss/rules.mk1
-rw-r--r--keyboards/naked48/config.h43
-rw-r--r--keyboards/naked48/info.json251
-rw-r--r--keyboards/naked48/keymaps/default/config.h41
-rw-r--r--keyboards/naked48/keymaps/default/keymap.c135
-rw-r--r--keyboards/naked48/keymaps/default/readme.md45
-rw-r--r--keyboards/naked48/keymaps/default/rules.mk29
-rw-r--r--keyboards/naked48/keymaps/default_with_nafuda/config.h64
-rw-r--r--keyboards/naked48/keymaps/default_with_nafuda/keymap.c173
-rw-r--r--keyboards/naked48/keymaps/default_with_nafuda/readme.md39
-rw-r--r--keyboards/naked48/keymaps/default_with_nafuda/rules.mk29
-rw-r--r--keyboards/naked48/keymaps/default_with_setta21/config.h41
-rw-r--r--keyboards/naked48/keymaps/default_with_setta21/keymap.c174
-rw-r--r--keyboards/naked48/keymaps/default_with_setta21/readme.md47
-rw-r--r--keyboards/naked48/keymaps/default_with_setta21/rules.mk29
-rw-r--r--keyboards/naked48/keymaps/salicylic/config.h41
-rw-r--r--keyboards/naked48/keymaps/salicylic/keymap.c149
-rw-r--r--keyboards/naked48/keymaps/salicylic/readme.md46
-rw-r--r--keyboards/naked48/keymaps/salicylic/rules.mk29
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_nafuda/config.h64
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c188
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md39
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk29
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_setta21/config.h41
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c187
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_setta21/readme.md47
-rw-r--r--keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk29
-rw-r--r--keyboards/naked48/naked48.c1
-rw-r--r--keyboards/naked48/naked48.h12
-rw-r--r--keyboards/naked48/readme.md18
-rw-r--r--keyboards/naked48/rev1/config.h121
-rw-r--r--keyboards/naked48/rev1/matrix.c357
-rw-r--r--keyboards/naked48/rev1/rev1.c15
-rw-r--r--keyboards/naked48/rev1/rev1.h88
-rw-r--r--keyboards/naked48/rev1/rules.mk3
-rw-r--r--keyboards/naked48/rev1/serial_config.h8
-rw-r--r--keyboards/naked48/rev1/serial_config_simpleapi.h8
-rw-r--r--keyboards/naked48/rev1/split_scomm.c92
-rw-r--r--keyboards/naked48/rev1/split_scomm.h22
-rw-r--r--keyboards/naked48/rev1/split_util.c70
-rw-r--r--keyboards/naked48/rev1/split_util.h16
-rw-r--r--keyboards/naked48/rules.mk73
-rw-r--r--keyboards/naked48/serial.c590
-rw-r--r--keyboards/naked48/serial.h86
-rw-r--r--keyboards/namecard2x4/rev1/rules.mk1
-rw-r--r--keyboards/namecard2x4/rev2/rules.mk1
-rw-r--r--keyboards/nek_type_a/config.h5
-rw-r--r--keyboards/nek_type_a/info.json101
-rw-r--r--keyboards/newgame40/rules.mk1
-rw-r--r--keyboards/niu_mini/keymaps/tucznak/config.h18
-rw-r--r--keyboards/niu_mini/keymaps/tucznak/keymap.c133
-rw-r--r--keyboards/niu_mini/keymaps/tucznak/readme.md5
-rw-r--r--keyboards/niu_mini/keymaps/tucznak/rules.mk22
-rw-r--r--keyboards/niu_mini/rules.mk1
-rw-r--r--keyboards/nomu30/rules.mk1
-rwxr-xr-xkeyboards/novelpad/keymaps/default/keymap.c4
-rw-r--r--keyboards/noxary/220/rules.mk3
-rw-r--r--keyboards/noxary/260/rules.mk1
-rw-r--r--keyboards/noxary/268_2/268_2.c42
-rw-r--r--keyboards/noxary/268_2/268_2.h65
-rw-r--r--keyboards/noxary/268_2/config.h53
-rw-r--r--keyboards/noxary/268_2/info.json287
-rw-r--r--keyboards/noxary/268_2/keymaps/default/keymap.c103
-rw-r--r--keyboards/noxary/268_2/readme.md7
-rw-r--r--keyboards/noxary/268_2/rules.mk10
-rw-r--r--keyboards/noxary/280/rules.mk1
-rw-r--r--keyboards/omnikeyish/info.json70
-rw-r--r--keyboards/omnikeyish/keymaps/default_101/keymap.c14
-rw-r--r--keyboards/omnikeyish/omnikeyish.h10
-rw-r--r--keyboards/org60/keymaps/default/keymap.c14
-rw-r--r--keyboards/otaku_split/rev0/config.h251
-rw-r--r--keyboards/otaku_split/rev0/info.json12
-rw-r--r--keyboards/otaku_split/rev0/keymaps/default/config.h19
-rw-r--r--keyboards/otaku_split/rev0/keymaps/default/keymap.c49
-rw-r--r--keyboards/otaku_split/rev0/keymaps/default/readme.md1
-rw-r--r--keyboards/otaku_split/rev0/keymaps/sample/config.h19
-rw-r--r--keyboards/otaku_split/rev0/keymaps/sample/keymap.c79
-rw-r--r--keyboards/otaku_split/rev0/keymaps/sample/readme.md1
-rw-r--r--keyboards/otaku_split/rev0/readme.md16
-rw-r--r--keyboards/otaku_split/rev0/rev0.c51
-rw-r--r--keyboards/otaku_split/rev0/rev0.h48
-rw-r--r--keyboards/otaku_split/rev0/rules.mk81
-rw-r--r--keyboards/otaku_split/rev1/config.h255
-rw-r--r--keyboards/otaku_split/rev1/info.json12
-rw-r--r--keyboards/otaku_split/rev1/keymaps/default/config.h19
-rw-r--r--keyboards/otaku_split/rev1/keymaps/default/keymap.c58
-rw-r--r--keyboards/otaku_split/rev1/keymaps/default/readme.md1
-rw-r--r--keyboards/otaku_split/rev1/keymaps/sample/config.h19
-rw-r--r--keyboards/otaku_split/rev1/keymaps/sample/keymap.c85
-rw-r--r--keyboards/otaku_split/rev1/keymaps/sample/readme.md1
-rw-r--r--keyboards/otaku_split/rev1/readme.md19
-rw-r--r--keyboards/otaku_split/rev1/rev1.c51
-rw-r--r--keyboards/otaku_split/rev1/rev1.h47
-rw-r--r--keyboards/otaku_split/rev1/rules.mk81
-rwxr-xr-xkeyboards/paladin64/keymaps/default/keymap.c9
-rw-r--r--keyboards/pdxkbc/config.h251
-rw-r--r--keyboards/pdxkbc/info.json12
-rw-r--r--keyboards/pdxkbc/keymaps/default/config.h19
-rw-r--r--keyboards/pdxkbc/keymaps/default/keymap.c65
-rw-r--r--keyboards/pdxkbc/keymaps/default/readme.md1
-rw-r--r--keyboards/pdxkbc/pdxkbc.c51
-rw-r--r--keyboards/pdxkbc/pdxkbc.h37
-rw-r--r--keyboards/pdxkbc/readme.md17
-rw-r--r--keyboards/pdxkbc/rules.mk80
-rw-r--r--keyboards/phantom/keymaps/default/keymap.c16
-rw-r--r--keyboards/phantom/rules.mk1
-rw-r--r--keyboards/pinky/rules.mk1
-rw-r--r--keyboards/plaid/rules.mk1
-rw-r--r--keyboards/planck/ez/config.h1
-rw-r--r--keyboards/planck/keymaps/basic/keymap.c23
-rw-r--r--keyboards/planck/keymaps/default/keymap.c28
-rw-r--r--keyboards/planck/keymaps/dodger/rules.mk1
-rw-r--r--keyboards/planck/keymaps/dsanchezseco/config.h36
-rw-r--r--keyboards/planck/keymaps/dsanchezseco/keymap.c16
-rw-r--r--keyboards/planck/keymaps/dvorak2space/config.h3
-rw-r--r--keyboards/planck/keymaps/dvorak2space/keymap.c242
-rw-r--r--keyboards/planck/keymaps/dvorak2space/passwords.c28
-rw-r--r--keyboards/planck/keymaps/dvorak2space/readme.md5
-rw-r--r--keyboards/planck/keymaps/dvorak2space/rules.mk20
-rw-r--r--keyboards/planck/keymaps/handwired_binaryplease/rules.mk1
-rw-r--r--keyboards/planck/keymaps/kloki/rules.mk1
-rw-r--r--keyboards/planck/keymaps/mattly/keymap.c164
-rw-r--r--keyboards/planck/keymaps/mattly/readme.md29
-rw-r--r--keyboards/planck/keymaps/snowkuma/config.h46
-rw-r--r--keyboards/planck/keymaps/snowkuma/custom_keycodes.h60
-rw-r--r--keyboards/planck/keymaps/snowkuma/keymap.c373
-rw-r--r--keyboards/planck/keymaps/snowkuma/my_strings.h4
-rw-r--r--keyboards/planck/keymaps/snowkuma/readme.md14
-rw-r--r--keyboards/planck/keymaps/snowkuma/rules.mk19
-rw-r--r--keyboards/planck/keymaps/vaire/rules.mk1
-rw-r--r--keyboards/planck/keymaps/yttyx/config.h5
-rw-r--r--keyboards/planck/keymaps/yttyx/keymap.c146
-rw-r--r--keyboards/planck/keymaps/yttyx/readme.md68
-rw-r--r--keyboards/planck/keymaps/yttyx/rules.mk11
-rw-r--r--keyboards/planck/rev6/config.h1
-rw-r--r--keyboards/preonic/rev1/rules.mk1
-rw-r--r--keyboards/preonic/rev2/rules.mk1
-rw-r--r--keyboards/preonic/rev3/config.h1
-rw-r--r--keyboards/primekb/prime_e/keymaps/jetpacktuxedo/keymap.c79
-rw-r--r--keyboards/primekb/prime_r/keymaps/default/keymap.c8
-rw-r--r--keyboards/quantrik/kyuu/rules.mk1
-rw-r--r--keyboards/qwertyydox/rules.mk1
-rw-r--r--keyboards/readme.md1
-rw-r--r--keyboards/redox/rules.mk1
-rw-r--r--keyboards/redox_w/rules.mk1
-rw-r--r--keyboards/rgbkb/sol/config.h1
-rw-r--r--keyboards/rgbkb/sol/rules.mk1
-rw-r--r--keyboards/rgbkb/zen/rev2/config.h2
-rw-r--r--keyboards/rgbkb/zygomorph/rev1/config.h1
-rw-r--r--keyboards/ropro/config.h58
-rw-r--r--keyboards/ropro/info.json13
-rw-r--r--keyboards/ropro/keymaps/default/keymap.c85
-rw-r--r--keyboards/ropro/keymaps/default/readme.md1
-rw-r--r--keyboards/ropro/readme.md16
-rw-r--r--keyboards/ropro/ropro.c1
-rw-r--r--keyboards/ropro/ropro.h39
-rw-r--r--keyboards/ropro/rules.mk67
-rw-r--r--keyboards/runner3680/3x6/config.h9
-rw-r--r--keyboards/runner3680/3x7/config.h9
-rw-r--r--keyboards/runner3680/3x8/config.h7
-rw-r--r--keyboards/runner3680/4x6/config.h9
-rw-r--r--keyboards/runner3680/4x7/config.h9
-rw-r--r--keyboards/runner3680/4x8/config.h7
-rw-r--r--keyboards/runner3680/5x6/config.h7
-rw-r--r--keyboards/runner3680/5x7/config.h3
-rw-r--r--keyboards/runner3680/5x8/config.h1
-rw-r--r--keyboards/runner3680/rules.mk8
-rw-r--r--keyboards/satan/keymaps/isoHHKB/keymap.c34
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/keymap.c22
-rw-r--r--keyboards/scarletbandana/keymaps/default/keymap.c15
-rw-r--r--keyboards/scarletbandana/rules.mk1
-rw-r--r--keyboards/scythe/config.h7
-rw-r--r--keyboards/scythe/rules.mk1
-rw-r--r--keyboards/sentraq/s60_x/default/rules.mk5
-rw-r--r--keyboards/sentraq/s60_x/keymaps/ansi_qwertz/keymap.c5
-rw-r--r--keyboards/sentraq/s60_x/rgb/rules.mk5
-rw-r--r--keyboards/sentraq/s65_x/rules.mk3
-rw-r--r--keyboards/shiro/config.h251
-rw-r--r--keyboards/shiro/info.json114
-rw-r--r--keyboards/shiro/keymaps/check/config.h19
-rw-r--r--keyboards/shiro/keymaps/check/keymap.c66
-rw-r--r--keyboards/shiro/keymaps/check/readme.md1
-rw-r--r--keyboards/shiro/keymaps/default/config.h19
-rw-r--r--keyboards/shiro/keymaps/default/keymap.c50
-rw-r--r--keyboards/shiro/keymaps/default/readme.md1
-rw-r--r--keyboards/shiro/readme.md27
-rw-r--r--keyboards/shiro/rules.mk80
-rw-r--r--keyboards/shiro/shiro.c51
-rw-r--r--keyboards/shiro/shiro.h41
-rw-r--r--keyboards/singa/readme.md5
-rw-r--r--keyboards/sixkeyboard/keymaps/default/keymap.c5
-rw-r--r--keyboards/sixkeyboard/rules.mk5
-rw-r--r--keyboards/speedo/keymaps/default/keymap.c16
-rw-r--r--keyboards/speedo/rules.mk1
-rwxr-xr-xkeyboards/tada68/rules.mk2
-rw-r--r--keyboards/tanuki/config.h3
-rw-r--r--keyboards/tanuki/keymaps/default/keymap.c30
-rw-r--r--keyboards/tanuki/tanuki.h6
-rw-r--r--keyboards/telophase/rules.mk1
-rwxr-xr-xkeyboards/tetris/config.h1
-rw-r--r--keyboards/the_ruler/rules.mk1
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c10
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/keymap.c32
-rw-r--r--keyboards/thevankeyboards/minivan/minivan.h4
-rw-r--r--keyboards/thevankeyboards/minivan/readme.md2
-rw-r--r--keyboards/thevankeyboards/minivan/rules.mk3
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c18
-rw-r--r--keyboards/thevankeyboards/roadkit/rules.mk3
-rw-r--r--keyboards/tmo50/rules.mk1
-rw-r--r--keyboards/tokyo60/rules.mk3
-rw-r--r--keyboards/treadstone48/rules.mk1
-rw-r--r--keyboards/treasure/type9/rules.mk1
-rw-r--r--keyboards/unikorn/config.h43
-rw-r--r--keyboards/unikorn/info.json16
-rw-r--r--keyboards/unikorn/keymaps/default/config.h19
-rw-r--r--keyboards/unikorn/keymaps/default/keymap.c36
-rw-r--r--keyboards/unikorn/keymaps/default/readme.md1
-rw-r--r--keyboards/unikorn/keymaps/default/rules.mk0
-rw-r--r--keyboards/unikorn/readme.md57
-rw-r--r--keyboards/unikorn/rules.mk48
-rw-r--r--keyboards/unikorn/unikorn.c89
-rw-r--r--keyboards/unikorn/unikorn.h52
-rw-r--r--keyboards/unikorn/usbconfig.h393
-rw-r--r--keyboards/v60_type_r/keymaps/default/keymap.c16
-rw-r--r--keyboards/v60_type_r/rules.mk1
-rw-r--r--keyboards/vision_division/keymaps/default/keymap.c368
-rw-r--r--keyboards/vision_division/rules.mk6
-rw-r--r--keyboards/wasdat/keymaps/konstantin/config.h4
-rw-r--r--keyboards/wasdat/keymaps/konstantin/keymap.c79
-rw-r--r--keyboards/wasdat/keymaps/konstantin/rules.mk8
-rw-r--r--keyboards/wasdat/matrix.c4
-rw-r--r--keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk1
-rw-r--r--keyboards/westfoxtrot/aanzee/rules.mk1
-rw-r--r--keyboards/westfoxtrot/cypher/rules.mk1
-rw-r--r--keyboards/whitefox/keymaps/konstantin/config.h2
-rw-r--r--keyboards/whitefox/keymaps/konstantin/keymap.c8
-rw-r--r--keyboards/winkeyless/bface/README.md4
-rw-r--r--keyboards/winkeyless/bface/backlight_ps2avrGB.c94
-rw-r--r--keyboards/winkeyless/bface/bface.c94
-rw-r--r--keyboards/winkeyless/bface/bface.h11
-rw-r--r--keyboards/winkeyless/bface/config.h9
-rw-r--r--keyboards/winkeyless/bface/i2c.c104
-rw-r--r--keyboards/winkeyless/bface/keymaps/p3lim/README.md14
-rw-r--r--keyboards/winkeyless/bface/keymaps/p3lim/keymap.c156
-rw-r--r--keyboards/winkeyless/bface/matrix.c113
-rw-r--r--keyboards/winkeyless/bface/rules.mk5
-rw-r--r--keyboards/winkeyless/bface/usbconfig.h5
-rw-r--r--keyboards/xd004/info.json11
-rw-r--r--keyboards/xd004/keymaps/default/keymap.c13
-rw-r--r--keyboards/xd004/keymaps/default/readme.md7
-rw-r--r--keyboards/xd004/keymaps/system_and_media/keymap.c59
-rw-r--r--keyboards/xd004/keymaps/system_and_media/readme.md9
-rw-r--r--keyboards/xd004/readme.md16
-rw-r--r--keyboards/xd004/v1/config.h80
-rw-r--r--keyboards/xd004/v1/rules.mk70
-rw-r--r--keyboards/xd004/xd004.c7
-rw-r--r--keyboards/xd004/xd004.h15
-rw-r--r--keyboards/xd60/keymaps/default/keymap.c14
-rw-r--r--keyboards/xd60/keymaps/iso/keymap.c14
-rw-r--r--keyboards/xd60/keymaps/split_bksp_arrows/keymap.c14
-rw-r--r--keyboards/xd60/rev2/rules.mk3
-rw-r--r--keyboards/xd60/rev3/rules.mk1
-rw-r--r--keyboards/xd75/rules.mk3
-rw-r--r--keyboards/xd87/rules.mk1
-rw-r--r--keyboards/xd96/info.json224
-rw-r--r--keyboards/yd68/rules.mk1
-rw-r--r--keyboards/yosino58/rules.mk1
-rw-r--r--keyboards/zinc/rules.mk1
-rw-r--r--layouts/community/ergodox/reset_eeprom/keymap.c18
-rw-r--r--layouts/community/ortho_1x4/belgorath/keymap.c24
-rw-r--r--layouts/community/ortho_1x4/layout.json1
-rw-r--r--layouts/community/ortho_4x12/jotix/config.h1
-rw-r--r--layouts/community/ortho_4x12/jotix/keymap.c123
-rw-r--r--layouts/community/ortho_4x12/jotix/readme.md2
-rw-r--r--layouts/community/ortho_4x12/jotix/rules.mk1
-rw-r--r--layouts/community/ortho_4x12/jotix/unicode.c185
-rw-r--r--lib/lufa/Bootloaders/DFU/makefile14
-rw-r--r--lib/python/milc.py716
-rw-r--r--lib/python/qmk/__init__.py0
-rw-r--r--lib/python/qmk/cli/compile/__init__.py0
-rwxr-xr-xlib/python/qmk/cli/compile/json.py44
-rwxr-xr-xlib/python/qmk/cli/doctor.py47
-rwxr-xr-xlib/python/qmk/cli/hello.py13
-rw-r--r--lib/python/qmk/cli/json/__init__.py0
-rwxr-xr-xlib/python/qmk/cli/json/keymap.py54
-rw-r--r--lib/python/qmk/errors.py6
-rw-r--r--lib/python/qmk/keymap.py100
-rw-r--r--lib/python/qmk/path.py32
-rw-r--r--message.mk4
-rw-r--r--quantum/debounce/eager_pk.c16
-rw-r--r--quantum/debounce/eager_pr.c17
-rw-r--r--quantum/encoder.c10
-rw-r--r--quantum/keymap_extras/sendstring_belgian.h79
-rw-r--r--quantum/keymap_extras/sendstring_bepo.h98
-rw-r--r--quantum/keymap_extras/sendstring_colemak.h60
-rw-r--r--quantum/keymap_extras/sendstring_dvorak.h60
-rw-r--r--quantum/keymap_extras/sendstring_french.h97
-rw-r--r--quantum/keymap_extras/sendstring_german.h104
-rw-r--r--quantum/keymap_extras/sendstring_jis.h65
-rw-r--r--quantum/keymap_extras/sendstring_norman.h56
-rw-r--r--quantum/keymap_extras/sendstring_spanish.h96
-rw-r--r--quantum/keymap_extras/sendstring_uk.h61
-rw-r--r--quantum/keymap_extras/sendstring_workman.h60
-rw-r--r--quantum/matrix.c2
-rw-r--r--quantum/process_keycode/process_combo.c43
-rw-r--r--quantum/process_keycode/process_combo.h5
-rw-r--r--quantum/process_keycode/process_leader.c16
-rw-r--r--quantum/process_keycode/process_space_cadet.c12
-rw-r--r--quantum/process_keycode/process_ucis.c5
-rw-r--r--quantum/quantum.c86
-rw-r--r--quantum/quantum.h125
-rw-r--r--quantum/quantum_keycodes.h3
-rw-r--r--quantum/rgb_matrix.c84
-rw-r--r--quantum/rgb_matrix.h39
-rw-r--r--quantum/rgb_matrix_animations/alpha_mods_anim.h2
-rw-r--r--quantum/rgb_matrix_animations/breathing_anim.h4
-rw-r--r--quantum/rgb_matrix_animations/colorband_pinwheel_sat_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/colorband_pinwheel_val_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/colorband_sat_anim.h7
-rw-r--r--quantum/rgb_matrix_animations/colorband_spiral_sat_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/colorband_spiral_val_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/colorband_val_anim.h7
-rw-r--r--quantum/rgb_matrix_animations/cycle_all_anim.h6
-rw-r--r--quantum/rgb_matrix_animations/cycle_left_right_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/cycle_out_in_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/cycle_out_in_dual_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/cycle_pinwheel_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/cycle_spiral_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/cycle_up_down_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/dual_beacon_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/gradient_up_down_anim.h4
-rw-r--r--quantum/rgb_matrix_animations/jellybean_raindrops_anim.h2
-rw-r--r--quantum/rgb_matrix_animations/rainbow_beacon_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/rainbow_moving_chevron_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/raindrops_anim.h6
-rw-r--r--quantum/rgb_matrix_animations/solid_color_anim.h3
-rw-r--r--quantum/rgb_matrix_animations/solid_reactive_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/solid_reactive_cross.h5
-rw-r--r--quantum/rgb_matrix_animations/solid_reactive_nexus.h7
-rw-r--r--quantum/rgb_matrix_animations/solid_reactive_simple_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/solid_reactive_wide.h5
-rw-r--r--quantum/rgb_matrix_animations/solid_splash_anim.h5
-rw-r--r--quantum/rgb_matrix_animations/splash_anim.h9
-rw-r--r--quantum/rgb_matrix_animations/typing_heatmap_anim.h2
-rw-r--r--quantum/rgb_matrix_runners/effect_runner_dx_dy.h6
-rw-r--r--quantum/rgb_matrix_runners/effect_runner_dx_dy_dist.h6
-rw-r--r--quantum/rgb_matrix_runners/effect_runner_i.h6
-rw-r--r--quantum/rgb_matrix_runners/effect_runner_reactive.h6
-rw-r--r--quantum/rgb_matrix_runners/effect_runner_reactive_splash.h9
-rw-r--r--quantum/rgb_matrix_runners/effect_runner_sin_cos_i.h6
-rw-r--r--quantum/rgb_matrix_types.h7
-rw-r--r--quantum/rgblight.c29
-rw-r--r--quantum/split_common/transport.c2
-rw-r--r--quantum/template/avr/config.h4
-rw-r--r--quantum/template/avr/rules.mk3
-rw-r--r--quantum/template/avr/template.c2
-rw-r--r--quantum/template/base/keymaps/default/config.h2
-rw-r--r--quantum/template/base/keymaps/default/keymap.c2
-rw-r--r--quantum/template/base/template.h2
-rw-r--r--quantum/template/ps2avrgb/config.h2
-rw-r--r--quantum/template/ps2avrgb/rules.mk15
-rw-r--r--quantum/template/ps2avrgb/template.c2
-rw-r--r--quantum/template/ps2avrgb/usbconfig.h10
-rw-r--r--requirements.txt5
-rw-r--r--setup.cfg330
-rw-r--r--shell.nix5
-rw-r--r--tmk_core/avr.mk10
-rw-r--r--tmk_core/chibios.mk6
-rw-r--r--tmk_core/common/action.c2
-rw-r--r--tmk_core/common/avr/bootloader.c77
-rw-r--r--tmk_core/common/backlight.c55
-rw-r--r--tmk_core/common/backlight.h20
-rw-r--r--tmk_core/common/eeconfig.c3
-rw-r--r--tmk_core/common/eeconfig.h6
-rw-r--r--tmk_core/rules.mk14
-rw-r--r--users/konstantin/config.h5
-rw-r--r--users/konstantin/rgb.c15
-rw-r--r--users/konstantin/rgb.h17
-rw-r--r--users/konstantin/tap_dance.c1
-rw-r--r--users/konstantin/tap_dance.h2
-rw-r--r--users/mattly/config.h9
-rw-r--r--users/mattly/mattly.c70
-rw-r--r--users/mattly/mattly.h83
-rw-r--r--users/mattly/readme.md10
-rw-r--r--users/mattly/rules.mk2
-rw-r--r--users/xulkal/custom_oled.c4
-rw-r--r--users/xulkal/process_records.c4
-rwxr-xr-xutil/docker_build.sh2
-rwxr-xr-xutil/freebsd_install.sh2
-rwxr-xr-xutil/linux_install.sh9
-rwxr-xr-xutil/macos_install.sh3
-rwxr-xr-xutil/msys2_install.sh3
-rwxr-xr-xutil/new_keyboard.sh13
-rwxr-xr-xutil/travis_build.sh2
-rwxr-xr-xutil/travis_compiled_push.sh3
-rw-r--r--util/travis_test.sh2
-rw-r--r--util/vagrant/Dockerfile33
-rw-r--r--util/vagrant/readme.md12
-rwxr-xr-xutil/wsl_install.sh5
863 files changed, 21580 insertions, 4615 deletions
diff --git a/.editorconfig b/.editorconfig
index c8cb35b86..60827f04b 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -16,12 +16,18 @@ insert_final_newline = true
trim_trailing_whitespace = false
indent_size = 4
+[{qmk,*.py}]
+charset = utf-8
+max_line_length = 200
+
# Make these match what we have in .gitattributes
[*.mk]
end_of_line = lf
+indent_style = tab
[Makefile]
end_of_line = lf
+indent_style = tab
[*.sh]
end_of_line = lf
diff --git a/.gitignore b/.gitignore
index 7cd7fa801..140bf4aa7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,3 +70,6 @@ util/Win_Check_Output.txt
secrets.tar
id_rsa_*
/.vs
+
+# python things
+__pycache__
diff --git a/.travis.yml b/.travis.yml
index b4a76765c..52c8f50a8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,8 +13,6 @@ env:
- MAKEFLAGS="-j3 --output-sync"
services:
- docker
-before_install:
- - docker build -t qmkfm/qmk_firmware .
install:
- npm install -g moxygen
script:
diff --git a/Dockerfile b/Dockerfile
index f15eb2ee3..17831c4ec 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,26 +1,4 @@
-FROM debian:9
-
-RUN apt-get update && apt-get install --no-install-recommends -y \
- avr-libc \
- avrdude \
- binutils-arm-none-eabi \
- binutils-avr \
- build-essential \
- dfu-programmer \
- dfu-util \
- gcc \
- gcc-avr \
- git \
- libnewlib-arm-none-eabi \
- software-properties-common \
- unzip \
- wget \
- zip \
- && rm -rf /var/lib/apt/lists/*
-
-# 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 /
+FROM qmkfm/base_container
VOLUME /qmk_firmware
WORKDIR /qmk_firmware
diff --git a/Vagrantfile b/Vagrantfile
index 552711d63..dae4e0d53 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -52,26 +52,37 @@ Vagrant.configure(2) do |config|
end
# Docker provider pulls from hub.docker.com respecting docker.image if
- # config.vm.box is nil. Note that this bind-mounts from the current dir to
+ # config.vm.box is nil. In this case, we adhoc build util/vagrant/Dockerfile.
+ # Note that this bind-mounts from the current dir to
# /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
# image, you'll need to: chmod -R a+rw .
config.vm.provider "docker" do |docker, override|
override.vm.box = nil
- docker.image = "jesselang/debian-vagrant:stretch"
+ docker.build_dir = "util/vagrant"
docker.has_ssh = true
end
- # This script ensures the required packages for AVR programming are installed
- # It also ensures the system always gets the latest updates when powered on
- # If this causes issues you can run a 'vagrant destroy' and then
- # add a # before ,run: (or change "always" to "once") and run 'vagrant up' to get a working
- # non-updated box and then attempt to troubleshoot or open a Github issue
- config.vm.provision "shell", inline: "/vagrant/util/qmk_install.sh", run: "always"
+ # Unless we are running the docker container directly
+ # 1. run container detached on vm
+ # 2. attach on 'vagrant ssh'
+ ["virtualbox", "vmware_workstation", "vmware_fusion"].each do |type|
+ config.vm.provider type do |virt, override|
+ override.vm.provision "docker" do |d|
+ d.run "qmkfm/base_container",
+ cmd: "tail -f /dev/null",
+ args: "--privileged -v /dev:/dev -v '/vagrant:/vagrant'"
+ end
+
+ override.vm.provision "shell", inline: <<-SHELL
+ echo 'docker restart qmkfm-base_container && exec docker exec -it qmkfm-base_container /bin/bash -l' >> ~vagrant/.bashrc
+ SHELL
+ end
+ end
config.vm.post_up_message = <<-EOT
- Log into the VM using 'vagrant ssh'. QMK directory synchronized with host is
- located at /vagrant
+ Log into the environment using 'vagrant ssh'. QMK directory synchronized with
+ host is located at /vagrant
To compile the .hex files use make command inside this directory, e.g.
cd /vagrant
make <keyboard>:default
diff --git a/bin/qmk b/bin/qmk
new file mode 100755
index 000000000..c34365bed
--- /dev/null
+++ b/bin/qmk
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+"""CLI wrapper for running QMK commands.
+"""
+import os
+import subprocess
+import sys
+from glob import glob
+from time import strftime
+from importlib import import_module
+from importlib.util import find_spec
+
+# Add the QMK python libs to our path
+script_dir = os.path.dirname(os.path.realpath(__file__))
+qmk_dir = os.path.abspath(os.path.join(script_dir, '..'))
+python_lib_dir = os.path.abspath(os.path.join(qmk_dir, 'lib', 'python'))
+sys.path.append(python_lib_dir)
+
+# Change to the root of our checkout
+os.environ['ORIG_CWD'] = os.getcwd()
+os.chdir(qmk_dir)
+
+# Make sure our modules have been setup
+with open('requirements.txt', 'r') as fd:
+ for line in fd.readlines():
+ line = line.strip().replace('<', '=').replace('>', '=')
+
+ if line[0] == '#':
+ continue
+
+ if '#' in line:
+ line = line.split('#')[0]
+
+ module = line.split('=')[0] if '=' in line else line
+ if not find_spec(module):
+ print('Your QMK build environment is not fully setup!\n')
+ print('Please run `./util/qmk_install.sh` to setup QMK.')
+ exit(255)
+
+# Figure out our version
+command = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags']
+result = subprocess.run(command, text=True, capture_output=True)
+
+if result.returncode == 0:
+ os.environ['QMK_VERSION'] = 'QMK ' + result.stdout.strip()
+else:
+ os.environ['QMK_VERSION'] = 'QMK ' + strftime('%Y-%m-%d-%H:%M:%S')
+
+# Setup the CLI
+import milc
+milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}ψ{style_reset_all}'
+
+# If we were invoked as `qmk <cmd>` massage sys.argv into `qmk-<cmd>`.
+# This means we can't accept arguments to the qmk script itself.
+script_name = os.path.basename(sys.argv[0])
+if script_name == 'qmk':
+ if len(sys.argv) == 1:
+ milc.cli.log.error('No subcommand specified!\n')
+
+ if len(sys.argv) == 1 or sys.argv[1] in ['-h', '--help']:
+ milc.cli.echo('usage: qmk <subcommand> [...]')
+ milc.cli.echo('\nsubcommands:')
+ subcommands = glob(os.path.join(qmk_dir, 'bin', 'qmk-*'))
+ for subcommand in sorted(subcommands):
+ subcommand = os.path.basename(subcommand).split('-', 1)[1]
+ milc.cli.echo('\t%s', subcommand)
+ milc.cli.echo('\nqmk <subcommand> --help for more information')
+ exit(1)
+
+ if sys.argv[1] in ['-V', '--version']:
+ milc.cli.echo(os.environ['QMK_VERSION'])
+ exit(0)
+
+ sys.argv[0] = script_name = '-'.join((script_name, sys.argv[1]))
+ del sys.argv[1]
+
+# Look for which module to import
+if script_name == 'qmk':
+ milc.cli.print_help()
+ exit(0)
+elif not script_name.startswith('qmk-'):
+ milc.cli.log.error('Invalid symlink, must start with "qmk-": %s', script_name)
+else:
+ subcommand = script_name.replace('-', '.').replace('_', '.').split('.')
+ subcommand.insert(1, 'cli')
+ subcommand = '.'.join(subcommand)
+
+ try:
+ import_module(subcommand)
+ except ModuleNotFoundError as e:
+ if e.__class__.__name__ != subcommand:
+ raise
+
+ milc.cli.log.error('Invalid subcommand! Could not import %s.', subcommand)
+ exit(1)
+
+if __name__ == '__main__':
+ milc.cli()
diff --git a/bin/qmk-compile-json b/bin/qmk-compile-json
new file mode 120000
index 000000000..c92dce8a1
--- /dev/null
+++ b/bin/qmk-compile-json
@@ -0,0 +1 @@
+qmk \ No newline at end of file
diff --git a/bin/qmk-doctor b/bin/qmk-doctor
new file mode 120000
index 000000000..c92dce8a1
--- /dev/null
+++ b/bin/qmk-doctor
@@ -0,0 +1 @@
+qmk \ No newline at end of file
diff --git a/bin/qmk-hello b/bin/qmk-hello
new file mode 120000
index 000000000..c92dce8a1
--- /dev/null
+++ b/bin/qmk-hello
@@ -0,0 +1 @@
+qmk \ No newline at end of file
diff --git a/bin/qmk-json-keymap b/bin/qmk-json-keymap
new file mode 120000
index 000000000..c92dce8a1
--- /dev/null
+++ b/bin/qmk-json-keymap
@@ -0,0 +1 @@
+qmk \ No newline at end of file
diff --git a/bootloader.mk b/bootloader.mk
index 4bcf183fb..9d73063d0 100644
--- a/bootloader.mk
+++ b/bootloader.mk
@@ -76,6 +76,10 @@ ifeq ($(strip $(BOOTLOADER)), bootloadHID)
OPT_DEFS += -DBOOTLOADER_BOOTLOADHID
BOOTLOADER_SIZE = 4096
endif
+ifeq ($(strip $(BOOTLOADER)), USBasp)
+ OPT_DEFS += -DBOOTLOADER_USBASP
+ BOOTLOADER_SIZE = 4096
+endif
ifdef BOOTLOADER_SIZE
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
diff --git a/build_json.mk b/build_json.mk
new file mode 100644
index 000000000..8820a8f4a
--- /dev/null
+++ b/build_json.mk
@@ -0,0 +1,27 @@
+# Look for a json keymap file
+ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.json)","")
+ KEYMAP_C := $(KEYBOARD_OUTPUT)/src/keymap.c
+ KEYMAP_JSON := $(MAIN_KEYMAP_PATH_5)/keymap.json
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.json)","")
+ KEYMAP_C := $(KEYBOARD_OUTPUT)/src/keymap.c
+ KEYMAP_JSON := $(MAIN_KEYMAP_PATH_4)/keymap.json
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.json)","")
+ KEYMAP_C := $(KEYBOARD_OUTPUT)/src/keymap.c
+ KEYMAP_JSON := $(MAIN_KEYMAP_PATH_3)/keymap.json
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.json)","")
+ KEYMAP_C := $(KEYBOARD_OUTPUT)/src/keymap.c
+ KEYMAP_JSON := $(MAIN_KEYMAP_PATH_2)/keymap.json
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
+ KEYMAP_C := $(KEYBOARD_OUTPUT)/src/keymap.c
+ KEYMAP_JSON := $(MAIN_KEYMAP_PATH_1)/keymap.json
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
+endif
+
+# Generate the keymap.c
+ifneq ("$(KEYMAP_JSON)","")
+ _ = $(shell test -e $(KEYMAP_C) || bin/qmk-json-keymap $(KEYMAP_JSON) -o $(KEYMAP_C))
+endif
diff --git a/build_keyboard.mk b/build_keyboard.mk
index 213cb4445..b08642065 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -98,31 +98,38 @@ MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP)
MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP)
-ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_5)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_4)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_3)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_2)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
-else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
- -include $(MAIN_KEYMAP_PATH_1)/rules.mk
- KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
- KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
-else ifneq ($(LAYOUTS),)
- include build_layout.mk
-else
- $(error Could not find keymap)
- # this state should never be reached
+# Check for keymap.json first, so we can regenerate keymap.c
+include build_json.mk
+
+ifeq ("$(wildcard $(KEYMAP_PATH))", "")
+ # Look through the possible keymap folders until we find a matching keymap.c
+ ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_5)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_4)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_3)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_2)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2)
+ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","")
+ -include $(MAIN_KEYMAP_PATH_1)/rules.mk
+ KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1)
+ else ifneq ($(LAYOUTS),)
+ # If we haven't found a keymap yet fall back to community layouts
+ include build_layout.mk
+ else
+ $(error Could not find keymap)
+ # this state should never be reached
+ endif
endif
ifeq ($(strip $(CTPC)), yes)
@@ -313,7 +320,6 @@ ifneq ("$(wildcard $(USER_PATH)/config.h)","")
CONFIG_H += $(USER_PATH)/config.h
endif
-
# Object files directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
@@ -323,7 +329,7 @@ ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
CONFIG_H += $(KEYMAP_PATH)/config.h
endif
-# # project specific files
+# project specific files
SRC += $(KEYBOARD_SRC) \
$(KEYMAP_C) \
$(QUANTUM_SRC)
@@ -392,6 +398,7 @@ $(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
all: build check-size
build: elf cpfirmware
check-size: build
+objs-size: build
include show_options.mk
include $(TMK_PATH)/rules.mk
diff --git a/common_features.mk b/common_features.mk
index 7c35f07d5..3296424a1 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -133,7 +133,7 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), IS31FL3731)
OPT_DEFS += -DIS31FL3731
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3731-simple.c
- SRC += i2c_master.c
+ QUANTUM_LIB_SRC += i2c_master.c
endif
RGB_MATRIX_ENABLE ?= no
@@ -157,21 +157,21 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3731.c
- SRC += i2c_master.c
+ QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733)
OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3733.c
- SRC += i2c_master.c
+ QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3737)
OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE
COMMON_VPATH += $(DRIVER_PATH)/issi
SRC += is31fl3737.c
- SRC += i2c_master.c
+ QUANTUM_LIB_SRC += i2c_master.c
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812)
@@ -271,7 +271,7 @@ ifeq ($(strip $(HAPTIC_ENABLE)), DRV2605L)
COMMON_VPATH += $(DRIVER_PATH)/haptic
SRC += haptic.c
SRC += DRV2605L.c
- SRC += i2c_master.c
+ QUANTUM_LIB_SRC += i2c_master.c
OPT_DEFS += -DHAPTIC_ENABLE
OPT_DEFS += -DDRV2605L
endif
diff --git a/docs/_summary.md b/docs/_summary.md
index 8a40ccd7f..56184f44d 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -8,6 +8,7 @@
* [QMK Basics](README.md)
* [QMK Introduction](getting_started_introduction.md)
+ * [QMK CLI](cli.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)
* [Getting Help](getting_started_getting_help.md)
@@ -34,6 +35,8 @@
* [Keyboard Guidelines](hardware_keyboard_guidelines.md)
* [Config Options](config_options.md)
* [Keycodes](keycodes.md)
+ * [Coding Conventions - C](coding_conventions_c.md)
+ * [Coding Conventions - Python](coding_conventions_python.md)
* [Documentation Best Practices](documentation_best_practices.md)
* [Documentation Templates](documentation_templates.md)
* [Glossary](reference_glossary.md)
@@ -41,6 +44,7 @@
* [Useful Functions](ref_functions.md)
* [Configurator Support](reference_configurator_support.md)
* [info.json Format](reference_info_json.md)
+ * [Python Development](python_development.md)
* [Features](features.md)
* [Basic Keycodes](keycodes_basic.md)
@@ -73,6 +77,7 @@
* [RGB Lighting](feature_rgblight.md)
* [RGB Matrix](feature_rgb_matrix.md)
* [Space Cadet](feature_space_cadet.md)
+ * [Split Keyboard](feature_split_keyboard.md)
* [Stenography](feature_stenography.md)
* [Swap Hands](feature_swap_hands.md)
* [Tap Dance](feature_tap_dance.md)
diff --git a/docs/cli.md b/docs/cli.md
new file mode 100644
index 000000000..0365f2c9c
--- /dev/null
+++ b/docs/cli.md
@@ -0,0 +1,31 @@
+# QMK CLI
+
+This page describes how to setup and use the QMK CLI.
+
+# Overview
+
+The QMK CLI makes building and working with QMK keyboards easier. We have provided a number of commands to help you work with QMK:
+
+* `qmk compile-json`
+
+# Setup
+
+Simply add the `qmk_firmware/bin` directory to your `PATH`. You can run the `qmk` commands from any directory.
+
+```
+export PATH=$PATH:$HOME/qmk_firmware/bin
+```
+
+You may want to add this to your `.profile`, `.bash_profile`, `.zsh_profile`, or other shell startup scripts.
+
+# Commands
+
+## `qmk compile-json`
+
+This command allows you to compile JSON files you have downloaded from <https://config.qmk.fm>.
+
+**Usage**:
+
+```
+qmk compile-json mine.json
+```
diff --git a/docs/coding_conventions_c.md b/docs/coding_conventions_c.md
new file mode 100644
index 000000000..cbddedf8b
--- /dev/null
+++ b/docs/coding_conventions_c.md
@@ -0,0 +1,58 @@
+# Coding Conventions (C)
+
+Most of our style is pretty easy to pick up on, but right now it's not entirely consistent. You should match the style of the code surrounding your change, but if that code is inconsistent or unclear use the following guidelines:
+
+* We indent using four (4) spaces (soft tabs)
+* We use a modified One True Brace Style
+ * Opening Brace: At the end of the same line as the statement that opens the block
+ * Closing Brace: Lined up with the first character of the statement that opens the block
+ * Else If: Place the closing brace at the beginning of the line and the next opening brace at the end of the same line.
+ * Optional Braces: Always include optional braces.
+ * Good: if (condition) { return false; }
+ * Bad: if (condition) return false;
+* We encourage use of C style comments: `/* */`
+ * Think of them as a story describing the feature
+ * Use them liberally to explain why particular decisions were made.
+ * Do not write obvious comments
+ * If you not sure if a comment is obvious, go ahead and include it.
+* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
+* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
+* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
+ * If you are not sure which to prefer use the `#if defined(DEFINED)` form.
+ * Do not change existing code from one style to the other, except when moving to a multiple condition `#if`.
+ * Do not put whitespace between `#` and `if`.
+ * When deciding how (or if) to indent directives keep these points in mind:
+ * Readability is more important than consistency.
+ * Follow the file's existing style. If the file is mixed follow the style that makes sense for the section you are modifying.
+ * When choosing to indent you can follow the indention level of the surrounding C code, or preprocessor directives can have their own indent level. Choose the style that best communicates the intent of your code.
+
+Here is an example for easy reference:
+
+```c
+/* Enums for foo */
+enum foo_state {
+ FOO_BAR,
+ FOO_BAZ,
+};
+
+/* Returns a value */
+int foo(void) {
+ if (some_condition) {
+ return FOO_BAR;
+ } else {
+ return -1;
+ }
+}
+```
+
+# Auto-formatting with clang-format
+
+[Clang-format](https://clang.llvm.org/docs/ClangFormat.html) is part of LLVM and can automatically format your code for you, because ain't nobody got time to do it manually. We supply a configuration file for it that applies most of the coding conventions listed above. It will only change whitespace and newlines, so you will still have to remember to include optional braces yourself.
+
+Use the [full LLVM installer](http://llvm.org/builds/) to get clang-format on Windows, or use `sudo apt install clang-format` on Ubuntu.
+
+If you run it from the command-line, pass `-style=file` as an option and it will automatically find the .clang-format configuration file in the QMK root directory.
+
+If you use VSCode, the standard C/C++ plugin supports clang-format, alternatively there is a [separate extension](https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat) for it.
+
+Some things (like LAYOUT macros) are destroyed by clang-format, so either don't run it on those files, or wrap the sensitive code in `// clang-format off` and `// clang-format on`.
diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
new file mode 100644
index 000000000..c7743050e
--- /dev/null
+++ b/docs/coding_conventions_python.md
@@ -0,0 +1,314 @@
+# Coding Conventions (Python)
+
+Most of our style follows PEP8 with some local modifications to make things less nit-picky.
+
+* We target Python 3.5 for compatability with all supported platforms.
+* We indent using four (4) spaces (soft tabs)
+* We encourage liberal use of comments
+ * Think of them as a story describing the feature
+ * Use them liberally to explain why particular decisions were made.
+ * Do not write obvious comments
+ * If you not sure if a comment is obvious, go ahead and include it.
+* We require useful docstrings for all functions.
+* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
+* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas.
+
+# YAPF
+
+You can use [yapf](https://github.com/google/yapf) to style your code. We provide a config in [setup.cfg](setup.cfg).
+
+# Imports
+
+We don't have a hard and fast rule for when to use `import ...` vs `from ... import ...`. Understandability and maintainability is our ultimate goal.
+
+Generally we prefer to import specific function and class names from a module to keep code shorter and easier to understand. Sometimes this results in a name that is ambiguous, and in such cases we prefer to import the module instead. You should avoid using the "as" keyword when importing, unless you are importing a compatability module.
+
+Imports should be one line per module. We group import statements together using the standard python rules- system, 3rd party, local.
+
+Do not use `from foo import *`. Supply a list of objects you want to import instead, or import the whole module.
+
+## Import Examples
+
+Good:
+
+```
+from qmk import effects
+
+effects.echo()
+```
+
+Bad:
+
+```
+from qmk.effects import echo
+
+echo() # It's unclear where echo comes from
+```
+
+Good:
+
+```
+from qmk.keymap import compile_firmware
+
+compile_firmware()
+```
+
+OK, but the above is better:
+
+```
+import qmk.keymap
+
+qmk.keymap.compile_firmware()
+```
+
+# Statements
+
+One statement per line.
+
+Even when allowed (EG `if foo: bar`) we do not combine 2 statements onto a single line.
+
+# Naming
+
+`module_name`, `package_name`, `ClassName`, `method_name`, `ExceptionName`, `function_name`, `GLOBAL_CONSTANT_NAME`, `global_var_name`, `instance_var_name`, `function_parameter_name`, `local_var_name`.
+
+Function names, variable names, and filenames should be descriptive; eschew abbreviation. In particular, do not use abbreviations that are ambiguous or unfamiliar to readers outside your project, and do not abbreviate by deleting letters within a word.
+
+Always use a .py filename extension. Never use dashes.
+
+## Names to Avoid
+
+* single character names except for counters or iterators. You may use "e" as an exception identifier in try/except statements.
+* dashes (-) in any package/module name
+* __double_leading_and_trailing_underscore__ names (reserved by Python)
+
+# Docstrings
+
+To maintain consistency with our docstrings we've set out the following guidelines.
+
+* Use markdown formatting
+* Always use triple-dquote docstrings with at least one linebreak: `"""\n"""`
+* First line is a short (< 70 char) description of what the function does
+* If you need more in your docstring leave a blank line between the description and the rest.
+* Start indented lines at the same indent level as the opening triple-dquote
+* Document all function arguments using the format described below
+* If present, Args:, Returns:, and Raises: should be the last three things in the docstring, separated by a blank line each.
+
+## Simple docstring example
+
+```
+def my_awesome_function():
+ """Return the number of seconds since 1970 Jan 1 00:00 UTC.
+ """
+ return int(time.time())
+```
+
+## Complex docstring example
+
+```
+def my_awesome_function():
+ """Return the number of seconds since 1970 Jan 1 00:00 UTC.
+
+ This function always returns an integer number of seconds.
+ """
+ return int(time.time())
+```
+
+## Function arguments docstring example
+
+```
+def my_awesome_function(start=None, offset=0):
+ """Return the number of seconds since 1970 Jan 1 00:00 UTC.
+
+ This function always returns an integer number of seconds.
+
+
+ Args:
+ start
+ The time to start at instead of 1970 Jan 1 00:00 UTC
+
+ offset
+ Return an answer that has this number of seconds subtracted first
+
+ Returns:
+ An integer describing a number of seconds.
+
+ Raises:
+ ValueError
+ When `start` or `offset` are not positive numbers
+ """
+ if start < 0 or offset < 0:
+ raise ValueError('start and offset must be positive numbers.')
+
+ if not start:
+ start = time.time()
+
+ return int(start - offset)
+```
+
+# Exceptions
+
+Exceptions are used to handle exceptional situations. They should not be used for flow control. This is a break from the python norm of "ask for forgiveness." If you are catching an exception it should be to handle a situation that is unusual.
+
+If you use a catch-all exception for any reason you must log the exception and stacktrace using cli.log.
+
+Make your try/except blocks as short as possible. If you need a lot of try statements you may need to restructure your code.
+
+# Tuples
+
+When defining one-item tuples always include a trailing comma so that it is obvious you are using a tuple. Do not rely on implicit one-item tuple unpacking. Better still use a list which is unambiguous.
+
+This is particularly important when using the printf-style format strings that are commonly used.
+
+# Lists and Dictionaries
+
+We have configured YAPF to differentiate between sequence styles with a trailing comma. When a trailing comma is omitted YAPF will format the sequence as a single line. When a trailing comma is included YAPF will format the sequence with one item per line.
+
+You should generally prefer to keep short definition on a single line. Break out to multiple lines sooner rather than later to aid readability and maintainability.
+
+# Parentheses
+
+Avoid excessive parentheses, but do use parentheses to make code easier to understand. Do not use them in return statements unless you are explicitly returning a tuple, or it is part of a math expression.
+
+# Format Strings
+
+We generally prefer printf-style format strings. Example:
+
+```
+name = 'World'
+print('Hello, %s!' % (name,))
+```
+
+This style is used by the logging module, which we make use of extensively, and we have adopted it in other places for consistency. It is also more familiar to C programmers, who are a big part of our casual audience.
+
+Our included CLI module has support for using these without using the percent (%) operator. Look at `cli.echo()` and the various `cli.log` functions (EG, `cli.log.info()`) for more details.
+
+# Comprehensions & Generator Expressions
+
+We encourage the liberal use of comprehensions and generators, but do not let them get too complex. If you need complexity fall back to a for loop that is easier to understand.
+
+# Lambdas
+
+OK to use but probably should be avoided. With comprehensions and generators the need for lambdas is not as strong as it once was.
+
+# Conditional Expressions
+
+OK in variable assignment, but otherwise should be avoided.
+
+Conditional expressions are if statements that are in line with code. For example:
+
+```
+x = 1 if cond else 2
+```
+
+It's generally not a good idea to use these as function arguments, sequence items, etc. It's too easy to overlook.
+
+# Default Argument Values
+
+Encouraged, but values must be immutable objects.
+
+When specifying default values in argument lists always be careful to specify objects that can't be modified in place. If you use a mutable object the changes you make will persist between calls, which is usually not what you want. Even if that is what you intend to do it is confusing for others and will hinder understanding.
+
+Bad:
+
+```
+def my_func(foo={}):
+ pass
+```
+
+Good:
+
+```
+def my_func(foo=None):
+ if not foo:
+ foo = {}
+```
+
+# Properties
+
+Always use properties instead of getter and setter functions.
+
+```
+class Foo(object):
+ def __init__(self):
+ self._bar = None
+
+ @property
+ def bar(self):
+ return self._bar
+
+ @bar.setter
+ def bar(self, bar):
+ self._bar = bar
+```
+
+# True/False Evaluations
+
+You should generally prefer the implicit True/False evaluation in if statements, rather than checking equivalency.
+
+Bad:
+
+```
+if foo == True:
+ pass
+
+if bar == False:
+ pass
+```
+
+Good:
+
+```
+if foo:
+ pass
+
+if not bar:
+ pass
+```
+
+# Decorators
+
+Use when appropriate. Try to avoid too much magic unless it helps with understanding.
+
+# Threading and Multiprocessing
+
+Should be avoided. If you need this you will have to make a strong case before we merge your code.
+
+# Power Features
+
+Python is an extremely flexible language and gives you many fancy features such as custom metaclasses, access to bytecode, on-the-fly compilation, dynamic inheritance, object reparenting, import hacks, reflection, modification of system internals, etc.
+
+Don't use these.
+
+Performance is not a critical concern for us, and code understandability is. We want our codebase to be approachable by someone who only has a day or two to play with it. These features generally come with a cost to easy understanding, and we would prefer to have code that can be readily understood over faster or more compact code.
+
+Note that some standard library modules use these techniques and it is ok to make use of those modules. But please keep readability and understandability in mind when using them.
+
+# Type Annotated Code
+
+For now we are not using any type annotation system, and would prefer that code remain unannotated. We may revisit this in the future.
+
+# Function length
+
+Prefer small and focused functions.
+
+We recognize that long functions are sometimes appropriate, so no hard limit is placed on function length. If a function exceeds about 40 lines, think about whether it can be broken up without harming the structure of the program.
+
+Even if your long function works perfectly now, someone modifying it in a few months may add new behavior. This could result in bugs that are hard to find. Keeping your functions short and simple makes it easier for other people to read and modify your code.
+
+You could find long and complicated functions when working with some code. Do not be intimidated by modifying existing code: if working with such a function proves to be difficult, you find that errors are hard to debug, or you want to use a piece of it in several different contexts, consider breaking up the function into smaller and more manageable pieces.
+
+# FIXMEs
+
+It is OK to leave FIXMEs in code. Why? Encouraging people to at least document parts of code that need to be thought out more (or that are confusing) is better than leaving this code undocumented.
+
+All FIXMEs should be formatted like:
+
+```
+FIXME(username): Revisit this code when the frob feature is done.
+```
+
+...where username is your GitHub username.
+
+# Unit Tests
+
+These are good. We should have some one day.
diff --git a/docs/config_options.md b/docs/config_options.md
index eb0a441cc..3012dcdcf 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -171,8 +171,8 @@ If you define these options you will enable the associated feature, which may in
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
* `#define TAP_CODE_DELAY 100`
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
-* `#define TAP_HOLD_CAPS_DELAY 200`
- * Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 200ms if not defined.
+* `#define TAP_HOLD_CAPS_DELAY 80`
+ * Sets the delay for Tap Hold keys (`LT`, `MT`) when using `KC_CAPSLOCK` keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
## RGB Light Configuration
@@ -289,6 +289,7 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
* `halfkay`
* `caterina`
* `bootloadHID`
+ * `USBasp`
## Feature Options
diff --git a/docs/contributing.md b/docs/contributing.md
index 7d1a9691c..761bc9959 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -54,62 +54,10 @@ Never made an open source contribution before? Wondering how contributions work
# Coding Conventions
-Most of our style is pretty easy to pick up on, but right now it's not entirely consistent. You should match the style of the code surrounding your change, but if that code is inconsistent or unclear use the following guidelines:
-
-* We indent using four (4) spaces (soft tabs)
-* We use a modified One True Brace Style
- * Opening Brace: At the end of the same line as the statement that opens the block
- * Closing Brace: Lined up with the first character of the statement that opens the block
- * Else If: Place the closing brace at the beginning of the line and the next opening brace at the end of the same line.
- * Optional Braces: Always include optional braces.
- * Good: if (condition) { return false; }
- * Bad: if (condition) return false;
-* We encourage use of C style comments: `/* */`
- * Think of them as a story describing the feature
- * Use them liberally to explain why particular decisions were made.
- * Do not write obvious comments
- * If you not sure if a comment is obvious, go ahead and include it.
-* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
-* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
-* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
- * If you are not sure which to prefer use the `#if defined(DEFINED)` form.
- * Do not change existing code from one style to the other, except when moving to a multiple condition `#if`.
- * Do not put whitespace between `#` and `if`.
- * When deciding how (or if) to indent directives keep these points in mind:
- * Readability is more important than consistency.
- * Follow the file's existing style. If the file is mixed follow the style that makes sense for the section you are modifying.
- * When choosing to indent you can follow the indention level of the surrounding C code, or preprocessor directives can have their own indent level. Choose the style that best communicates the intent of your code.
-
-Here is an example for easy reference:
+Most of our style is pretty easy to pick up on. If you are familiar with either C or Python you should not have too much trouble with our local styles.
-```c
-/* Enums for foo */
-enum foo_state {
- FOO_BAR,
- FOO_BAZ,
-};
-
-/* Returns a value */
-int foo(void) {
- if (some_condition) {
- return FOO_BAR;
- } else {
- return -1;
- }
-}
-```
-
-# Auto-formatting with clang-format
-
-[Clang-format](https://clang.llvm.org/docs/ClangFormat.html) is part of LLVM and can automatically format your code for you, because ain't nobody got time to do it manually. We supply a configuration file for it that applies most of the coding conventions listed above. It will only change whitespace and newlines, so you will still have to remember to include optional braces yourself.
-
-Use the [full LLVM installer](http://llvm.org/builds/) to get clang-format on Windows, or use `sudo apt install clang-format` on Ubuntu.
-
-If you run it from the command-line, pass `-style=file` as an option and it will automatically find the .clang-format configuration file in the QMK root directory.
-
-If you use VSCode, the standard C/C++ plugin supports clang-format, alternatively there is a [separate extension](https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat) for it.
-
-Some things (like LAYOUT macros) are destroyed by clang-format, so either don't run it on those files, or wrap the sensitive code in `// clang-format off` and `// clang-format on`.
+* [Coding Conventions - C](coding_conventions_c.md)
+* [Coding Conventions - Python](coding_conventions_python.md)
# General Guidelines
diff --git a/docs/faq_build.md b/docs/faq_build.md
index 23d6a6702..bcf017a9b 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -49,15 +49,13 @@ Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices m
## Unknown Device for DFU Bootloader
-If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue.
+Issues encountered when flashing keyboards on Windows are most often due to having the wrong drivers installed for the bootloader.
-Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue.
+Re-running the installation script for MSYS2 may help (eg run `util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue. Alternatively, you can download and run the [`qmk_driver_installer`](https://github.com/qmk/qmk_driver_installer) package.
-If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUSB` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again. If that doesn't work, try all of the options, until one works.
+If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, and run it on the system. Then, you will need to reset your board into bootloader mode. After that, locate the device in question. If the device doesn't show up in the list (or nothing shows up in the list), you may need to enable the `List all devices` option in the `Options` menu.
-?> There isn't a best option for which driver should be used here. Some options work better on some systems than others. libUSB and WinUSB seem to be the best options here.
-
-If the bootloader doesn't show up in the list for devices, you may need to enable the "List all devices" option in the `Options` menu, and then find the bootloader in question.
+From here, you will need to know what type of controller the board is using. You may see it listed in the Device Manager as `ATmega32U4` device (which is an AVR board), or an `STM32` device (Which is an ARM board). For AVR boards, use `libusb-win32` for the driver. For ARM boards, use the `WinUSB` driver. Once the correct driver type has been selected, click on the `Replace Driver` button, unplug your board, plug it back in, and reset it again.
## WINAVR is Obsolete
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 7c1690d13..f6cc729b6 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -87,6 +87,7 @@ Size after:
- EEPROM has around a 100000 write cycle. You shouldn't rewrite the
firmware repeatedly and continually; that'll burn the EEPROM
eventually.
+
## NKRO Doesn't work
First you have to compile firmware with this build option `NKRO_ENABLE` in **Makefile**.
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index a6ddf458c..f748ccd70 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -256,10 +256,10 @@ If you press a Mod Tap key, tap another key (press and release) and then release
For Instance:
-- `SHFT_T(KC_A)` Down
+- `SFT_T(KC_A)` Down
- `KC_X` Down
- `KC_X` Up
-- `SHFT_T(KC_A)` Up
+- `SFT_T(KC_A)` Up
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this will be registered as `ax` by the firmware and host system. With permissive hold enabled, this modifies how this is handled by considering the Mod Tap keys as a Mod if another key is tapped, and would registered as `X` (`SHIFT`+`x`).
@@ -279,9 +279,9 @@ Setting `Ignore Mod Tap Interrupt` requires holding both keys for the `TAPPING_
For Instance:
-- `SHFT_T(KC_A)` Down
+- `SFT_T(KC_A)` Down
- `KC_X` Down
-- `SHFT_T(KC_A)` Up
+- `SFT_T(KC_A)` Up
- `KC_X` Up
Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` enabled, holding both keys are required for the `TAPPING_TERM` to register the hold action. A quick tap will output `ax` in this case, while a hold on both will still output `X` (`SHIFT`+`x`).
@@ -303,11 +303,11 @@ When the user holds a key after tap, this repeats the tapped key rather to hold
Example:
-- SHFT_T(KC_A) Down
-- SHFT_T(KC_A) Up
-- SHFT_T(KC_A) Down
+- SFT_T(KC_A) Down
+- SFT_T(KC_A) Up
+- SFT_T(KC_A) Down
- wait more than tapping term...
-- SHFT_T(KC_A) Up
+- SFT_T(KC_A) Up
With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function.
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index b06db89e4..64c663076 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -65,7 +65,7 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
-|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
+|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
@@ -73,8 +73,10 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
## Backlight On State
-Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *low*.
-Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case you must `#define BACKLIGHT_ON_STATE 1`, so that when the transistor is on, the pin is driven *high* instead.
+Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
+Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
+
+This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
## Multiple backlight pins
diff --git a/docs/feature_combo.md b/docs/feature_combo.md
index 4cb1bcda0..9db7be511 100644
--- a/docs/feature_combo.md
+++ b/docs/feature_combo.md
@@ -59,19 +59,12 @@ void process_combo_event(uint8_t combo_index, bool pressed) {
switch(combo_index) {
case ZC_COPY:
if (pressed) {
- register_code(KC_LCTL);
- register_code(KC_C);
- unregister_code(KC_C);
- unregister_code(KC_LCTL);
+ tap_code16(LCTL(KC_C));
}
break;
-
case XV_PASTE:
if (pressed) {
- register_code(KC_LCTL);
- register_code(KC_V);
- unregister_code(KC_V);
- unregister_code(KC_LCTL);
+ tap_code16(LCTL(KC_V));
}
break;
}
@@ -87,3 +80,24 @@ If you're using long combos, or even longer combos, you may run into issues with
In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file.
You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`.
+
+## Keycodes
+
+You can enable, disable and toggle the Combo feature on the fly. This is useful if you need to disable them temporarily, such as for a game.
+
+|Keycode |Description |
+|----------|---------------------------------|
+|`CMB_ON` |Turns on Combo feature |
+|`CMB_OFF` |Turns off Combo feature |
+|`CMB_TOG` |Toggles Combo feature on and off |
+
+## User callbacks
+
+In addition to the keycodes, there are a few functions that you can use to set the status, or check it:
+
+|Function |Description |
+|-----------|--------------------------------------------------------------------|
+| `combo_enable()` | Enables the combo feature |
+| `combo_disable()` | Disables the combo feature, and clears the combo buffer |
+| `combo_toggle()` | Toggles the state of the combo feature |
+| `is_combo_enabled()` | Returns the status of the combo feature state (true or false) |
diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md
index 9ac97a9a1..bb2d538e7 100644
--- a/docs/feature_encoders.md
+++ b/docs/feature_encoders.md
@@ -6,7 +6,6 @@ Basic encoders are supported by adding this to your `rules.mk`:
and this to your `config.h`:
- #define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B12 }
#define ENCODERS_PAD_B { B13 }
diff --git a/docs/feature_oled_driver.md b/docs/feature_oled_driver.md
index 155dfa9d2..503e43828 100644
--- a/docs/feature_oled_driver.md
+++ b/docs/feature_oled_driver.md
@@ -14,7 +14,7 @@ Tested combinations:
Hardware configurations using ARM-based microcontrollers or different sizes of OLED modules may be compatible, but are untested.
-!> Warning: This OLED Driver currently uses the new i2c_master driver from split common code. If your split keyboard uses i2c to communication between sides this driver could cause an address conflict (serial is fine). Please contact your keyboard vendor and ask them to migrate to the latest split common code to fix this.
+!> Warning: This OLED Driver currently uses the new i2c_master driver from split common code. If your split keyboard uses I2C to communicate between sides, this driver could cause an address conflict (serial is fine). Please contact your keyboard vendor and ask them to migrate to the latest split common code to fix this. In addition, the display timeout system to reduce OLED burn-in also uses split common to detect keypresses, so you will need to implement custom timeout logic for non-split common keyboards.
## Usage
diff --git a/docs/feature_space_cadet.md b/docs/feature_space_cadet.md
index 075578522..41a44627e 100644
--- a/docs/feature_space_cadet.md
+++ b/docs/feature_space_cadet.md
@@ -43,6 +43,7 @@ By default Space Cadet assumes a US ANSI layout, but if your layout uses differe
|`LAPO_KEYS` |`KC_LALT, KC_LSFT, KC_9` |Send `KC_LALT` when held, the mod `KC_LSFT` with the key `KC_9` when tapped. |
|`RAPC_KEYS` |`KC_RALT, KC_RSFT, KC_0` |Send `KC_RALT` when held, the mod `KC_RSFT` with the key `KC_0` when tapped. |
|`SFTENT_KEYS` |`KC_RSFT, KC_TRNS, SFTENT_KEY` |Send `KC_RSFT` when held, no mod with the key `SFTENT_KEY` when tapped. |
+|`SPACE_CADET_MODIFIER_CARRYOVER` |*Not defined* |Store current modifiers before the hold mod is pressed and use them with the tap mod and keycode. Useful for when you frequently release a modifier before triggering Space Cadet. |
## Obsolete Configuration
diff --git a/docs/feature_split_keyboard.md b/docs/feature_split_keyboard.md
new file mode 100644
index 000000000..95aceab22
--- /dev/null
+++ b/docs/feature_split_keyboard.md
@@ -0,0 +1,185 @@
+# Split Keyboard
+
+Many keyboards in the QMK Firmware repo are "split" keyboards. They use two controllers—one plugging into USB, and the second connected by a serial or an I<sup>2</sup>C connection over a TRRS or similar cable.
+
+Split keyboards can have a lot of benefits, but there is some additional work needed to get them enabled.
+
+QMK Firmware has a generic implementation that is usable by any board, as well as numerous board specific implementations.
+
+For this, we will mostly be talking about the generic implementation used by the Let's Split and other keyboards.
+
+!> ARM is not yet supported for Split Keyboards. Progress is being made, but we are not quite there, yet.
+
+
+## Hardware Configuration
+
+This assumes that you're using two Pro Micro-compatible controllers, and are using TRRS jacks to connect to two halves.
+
+### Required Hardware
+
+Apart from diodes and key switches for the keyboard matrix in each half, you will need 2x TRRS sockets and 1x TRRS cable.
+
+Alternatively, you can use any sort of cable and socket that has at least 3 wires.
+
+If you want to use I<sup>2</sup>C to communicate between halves, you will need a cable with at least 4 wires and 2x 4.7kΩ pull-up resistors.
+
+#### Considerations
+
+The most commonly used connection is a TRRS cable and jacks. These provide 4 wires, making them very useful for split keyboards, and are easy to find.
+
+However, since one of the wires carries VCC, this means that the boards are not hot pluggable. You should always disconnect the board from USB before unplugging and plugging in TRRS cables, or you can short the controller, or worse.
+
+Another option is to use phone cables (as in, old school RJ-11/RJ-14 cables). Make sure that you use one that actually supports 4 wires/lanes.
+
+However, USB cables, SATA cables, and even just 4 wires have been known to be used for communication between the controllers.
+
+!> Using USB cables for communication between the controllers works just fine, but the connector could be mistaken for a normal USB connection and potentially short out the keyboard, depending on how it's wired. For this reason, they are not recommended for connecting split keyboards.
+
+### Serial Wiring
+
+The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and D0 (aka PDO or pin 3) between the two Pro Micros.
+
+?> Note that the pin used here is actually set by `SOFT_SERIAL_PIN` below.
+
+![serial wiring](https://i.imgur.com/C3D1GAQ.png)
+
+### I<sup>2</sup>C Wiring
+
+The 4 wires of the TRRS cable need to connect GND, VCC, and SCL and SDA (aka PD0/pin 3 and PD1/pin 2, respectively) between the two Pro Micros.
+
+The pull-up resistors may be placed on either half. It is also possible to use 4 resistors and have the pull-ups in both halves, but this is unnecessary in simple use cases.
+
+![I2C wiring](https://i.imgur.com/Hbzhc6E.png)
+
+## Firmware Configuration
+
+To enable the split keyboard feature, add the following to your `rules.mk`:
+
+```make
+SPLIT_KEYBOARD = yes
+```
+
+If you're using a custom transport (communication method), then you will also need to add:
+
+```make
+SPLIT_TRANSPORT = custom
+```
+
+### Setting Handedness
+
+By default, the firmware does not know which side is which; it needs some help to determine that. There are several ways to do this, listed in order of precedence.
+
+#### Handedness by Pin
+
+You can configure the firmware to read a pin on the controller to determine handedness. To do this, add the following to your `config.h` file:
+
+```c
+#define SPLIT_HAND_PIN B7
+```
+
+This will read the specified pin. If it's high, then the controller assumes it is the left hand, and if it's low, it's assumed to be the right side.
+
+#### Handedness by EEPROM
+
+This method sets the keyboard's handedness by setting a flag in the persistent storage (`EEPROM`). This is checked when the controller first starts up, and determines what half the keyboard is, and how to orient the keyboard layout.
+
+
+To enable this method, add the following to your `config.h` file:
+
+```c
+#define EE_HANDS
+```
+
+However, you'll have to flash the EEPROM files for the correct hand to each controller. You can do this manually, or there are targets for avrdude and dfu to do this, while flashing the firmware:
+
+* `:avrdude-split-left`
+* `:avrdude-split-right`
+* `:dfu-split-left`
+* `:dfu-split-right`
+
+This setting is not changed when re-initializing the EEPROM using the `EEP_RST` key, or using the `eeconfig_init()` function. However, if you reset the EEPROM outside of the firmware's built in options (such as flashing a file that overwrites the `EEPROM`, like how the [QMK Toolbox]()'s "Reset EEPROM" button works), you'll need to re-flash the controller with the `EEPROM` files.
+
+You can find the `EEPROM` files in the QMK firmware repo, [here](https://github.com/qmk/qmk_firmware/tree/master/quantum/split_common).
+
+#### Handedness by `#define`
+
+You can set the handedness at compile time. This is done by adding the following to your `config.h` file:
+
+```c
+#define MASTER_RIGHT
+```
+
+or
+
+```c
+#define MASTER_LEFT
+```
+
+If neither are defined, the handedness defaults to `MASTER_LEFT`.
+
+
+### Communication Options
+
+Because not every split keyboard is identical, there are a number of additional options that can be configured in your `config.h` file.
+
+```c
+#define USE_I2C
+```
+
+This enables I<sup>2</sup>C support for split keyboards. This isn't strictly for communication, but can be used for OLED or other I<sup>2</sup>C-based devices.
+
+```c
+#define SOFT_SERIAL_PIN D0
+```
+
+This sets the pin to be used for serial communication. If you're not using serial, you shouldn't need to define this.
+
+However, if you are using serial and I<sup>2</sup>C on the board, you will need to set this, and to something other than D0 and D1 (as these are used for I<sup>2</sup>C communication).
+
+```c
+#define SELECT_SOFT_SERIAL_SPEED {#}`
+```
+
+If you're having issues with serial communication, you can change this value, as it controls the communication speed for serial. The default is 1, and the possible values are:
+
+* **`0`**: about 189kbps (Experimental only)
+* **`1`**: about 137kbps (default)
+* **`2`**: about 75kbps
+* **`3`**: about 39kbps
+* **`4`**: about 26kbps
+* **`5`**: about 20kbps
+
+### Hardware Configuration Options
+
+There are some settings that you may need to configure, based on how the hardware is set up.
+
+```c
+#define MATRIX_ROW_PINS_RIGHT { <row pins> }
+#define MATRIX_COL_PINS_RIGHT { <col pins> }
+```
+
+This allows you to specify a different set of pins for the matrix on the right side. This is useful if you have a board with differently-shaped halves that requires a different configuration (such as Keebio's Quefrency).
+
+
+```c
+#define RGBLIGHT_SPLIT
+```
+
+This option enables synchronization of the RGB Light modes between the controllers of the split keyboard. This is for keyboards that have RGB LEDs that are directly wired to the controller (that is, they are not using the "extra data" option on the TRRS cable).
+
+```c
+#define RGBLED_SPLIT { 6, 6 }
+```
+
+This sets how many LEDs are directly connected to each controller. The first number is the left side, and the second number is the right side.
+
+?> This setting implies that `RGBLIGHT_SPLIT` is enabled, and will forcibly enable it, if it's not.
+
+
+## Additional Resources
+
+Nicinabox has a [very nice and detailed guide](https://github.com/nicinabox/lets-split-guide) for the Let's Split keyboard, that covers most everything you need to know, including troubleshooting information.
+
+However, the RGB Light section is out of date, as it was written long before the RGB Split code was added to QMK Firmware. Instead, wire each strip up directly to the controller.
+
+<!-- I may port this information later, but for now ... it's very nice, and covers everything -->
diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md
index 778cdc69c..bd1f4fa5a 100644
--- a/docs/feature_unicode.md
+++ b/docs/feature_unicode.md
@@ -1,28 +1,44 @@
# Unicode Support
-There are three Unicode keymap definition methods available in QMK:
+Unicode characters can be input straight from your keyboard! There are some limitations, however.
-## `UNICODE_ENABLE`
+QMK has three different methods for enabling Unicode input and defining keycodes:
-Supports Unicode up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji. The keycode function is `UC(c)` in the keymap, where _c_ is the code point's number (preferably hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
+## Basic Unicode
-## `UNICODEMAP_ENABLE`
+This method supports Unicode code points up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji.
-Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(i)`, where _i_ is an array index into the mapping table. The table may contain at most 16384 entries.
+Add the following to your `rules.mk`:
-You may want to have an enum to make referencing easier. So, you could add something like this to your keymap file:
+```make
+UNICODE_ENABLE = yes
+```
+
+Then add `UC(c)` keycodes to your keymap, where _c_ is the code point (preferably in hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
+
+## Unicode Map
+
+This method supports all possible code points (up to `0x10FFFF`); however, you need to maintain a separate mapping table in your keymap file, which may contain at most 16384 entries.
+
+Add the following to your `rules.mk`:
+
+```make
+UNICODEMAP_ENABLE = yes
+```
+
+Then add `X(i)` keycodes to your keymap, where _i_ is an array index into the mapping table:
```c
enum unicode_names {
- BANG,
- IRONY,
- SNEK,
+ BANG,
+ IRONY,
+ SNEK
};
const uint32_t PROGMEM unicode_map[] = {
- [BANG] = 0x203D, // ‽
- [IRONY] = 0x2E2E, // ⸮
- [SNEK] = 0x1F40D, // 🐍
+ [BANG] = 0x203D, // ‽
+ [IRONY] = 0x2E2E, // ⸮
+ [SNEK] = 0x1F40D, // 🐍
};
```
@@ -30,27 +46,33 @@ Then you can use `X(BANG)`, `X(SNEK)` etc. in your keymap.
### Lower and Upper Case
-Characters often come in lower and upper case pairs, for example: å, Å. To make inputting these characters easier, you can use `XP(i, j)` in your keymap, where _i_ and _j_ are the mapping table indices of the lower and upper case character, respectively. If you're holding down Shift or have Caps Lock turned on when you press the key, the second (upper case) character will be inserted; otherwise, the first (lower case) version will appear.
+Characters often come in lower and upper case pairs, such as å and Å. To make inputting these characters easier, you can use `XP(i, j)` in your keymap, where _i_ and _j_ are the mapping table indices of the lower and upper case character, respectively. If you're holding down Shift or have Caps Lock turned on when you press the key, the second (upper case) character will be inserted; otherwise, the first (lower case) version will appear.
-This is most useful when creating a keymap for an international layout with special characters. Instead of having to put the lower and upper case versions of a character on separate keys, you can have them both on the same key by using `XP`. This blends Unicode keys in with regular alphas.
+This is most useful when creating a keymap for an international layout with special characters. Instead of having to put the lower and upper case versions of a character on separate keys, you can have them both on the same key by using `XP()`. This helps blend Unicode keys in with regular alphas.
Due to keycode size constraints, _i_ and _j_ can each only refer to one of the first 128 characters in your `unicode_map`. In other words, 0 ≤ _i_ ≤ 127 and 0 ≤ _j_ ≤ 127. This is enough for most use cases, but if you'd like to customize the index calculation, you can override the [`unicodemap_index()`](https://github.com/qmk/qmk_firmware/blob/71f640d47ee12c862c798e1f56392853c7b1c1a8/quantum/process_keycode/process_unicodemap.c#L40) function. This also allows you to, say, check Ctrl instead of Shift/Caps.
-## `UCIS_ENABLE`
+## UCIS
+
+This method also supports all possible code points. As with the Unicode Map method, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you have to create a custom keycode or function that invokes this functionality.
-Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you have to add a keycode or function that calls `qk_ucis_start()`. Once this function has been called, you can type the corresponding mnemonic for your character, then hit Space or Enter to complete it, or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode character inserted.
+Add the following to your `rules.mk`:
+
+```make
+UCIS_ENABLE = yes
+```
-For instance, you could define a table like this in your keymap file:
+Then define a table like this in your keymap file:
```c
const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
- UCIS_SYM("poop", 0x1F4A9), // 💩
- UCIS_SYM("rofl", 0x1F923), // 🤣
- UCIS_SYM("kiss", 0x1F619) // 😙
+ UCIS_SYM("poop", 0x1F4A9), // 💩
+ UCIS_SYM("rofl", 0x1F923), // 🤣
+ UCIS_SYM("kiss", 0x1F619) // 😙
);
```
-To use it, call `qk_ucis_start()`, then type "rofl" and hit Enter. QMK should erase the "rofl" text and insert the laughing emoji.
+To use it, call `qk_ucis_start()`. Then, type the mnemonic for the character (such as "rofl"), and hit Space or Enter. QMK should erase the "rofl" text and insert the laughing emoji.
### Customization
@@ -68,7 +90,7 @@ Unicode input in QMK works by inputting a sequence of characters to the OS, sort
The following input modes are available:
-* **`UC_OSX`**: macOS built-in Unicode hex input. Supports code points up to `0xFFFF` (`0x10FFFF` with `UNICODEMAP`).
+* **`UC_OSX`**: macOS built-in Unicode hex input. Supports code points up to `0xFFFF` (`0x10FFFF` with Unicode Map).
To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
By default, this mode uses the left Option key (`KC_LALT`) for Unicode input, but this can be changed by defining [`UNICODE_KEY_OSX`](#input-key-configuration) with another keycode.
@@ -112,7 +134,7 @@ You can also switch the input mode by calling `set_unicode_input_mode(x)` in you
```c
void eeconfig_init_user(void) {
- set_unicode_input_mode(UC_LNX);
+ set_unicode_input_mode(UC_LNX);
}
```
diff --git a/docs/features.md b/docs/features.md
index f9ef51eae..f230c7c23 100644
--- a/docs/features.md
+++ b/docs/features.md
@@ -30,6 +30,7 @@ QMK has a staggering number of features for building your keyboard. It can take
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
* [RGB Matrix](feature_rgb_matrix.md) - RGB Matrix lights for per key lighting.
* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
+* [Split Keyboard](feature_split_keyboard.md)
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
* [Swap Hands](feature_swap_hands.md) - Mirror your keyboard for one handed usage.
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
diff --git a/docs/flashing.md b/docs/flashing.md
index 3b4582f00..833b9dd62 100644
--- a/docs/flashing.md
+++ b/docs/flashing.md
@@ -119,6 +119,31 @@ Flashing sequence:
3. Flash a .hex file
4. Reset the device into application mode (may be done automatically)
+## USBasploader
+
+USBasploader is a bootloader developed by matrixstorm. It is used in some non-USB AVR chips such as the ATmega328P, which run V-USB.
+
+To ensure compatibility with the USBasploader bootloader, make sure this block is present in your `rules.mk`:
+
+ # 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 = USBasp
+
+Compatible flashers:
+
+* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
+* [avrdude](http://www.nongnu.org/avrdude/) with the `usbasp` programmer
+* [AVRDUDESS](https://github.com/zkemble/AVRDUDESS)
+
+Flashing sequence:
+
+1. Press the `RESET` keycode, or keep the boot pin shorted to GND while quickly shorting RST to GND
+2. Wait for the OS to detect the device
+3. Flash a .hex file
+4. Reset the device into application mode (may be done automatically)
+
## STM32
All STM32 chips come preloaded with a factory bootloader that cannot be modified nor deleted. Some STM32 chips have bootloaders that do not come with USB programming (e.g. STM32F103) but the process is still the same.
diff --git a/docs/getting_started_vagrant.md b/docs/getting_started_vagrant.md
index 848a43a1f..b62524271 100644
--- a/docs/getting_started_vagrant.md
+++ b/docs/getting_started_vagrant.md
@@ -1,16 +1,20 @@
# Vagrant Quick Start
-This project includes a Vagrantfile that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
+This project includes a `Vagrantfile` that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
## Requirements
-Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
+Using the `Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as a supported provider installed:
-*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest`
+* [VirtualBox](https://www.virtualbox.org/) (Version at least 5.0.12)
+ * Sold as 'the most accessible platform to use Vagrant'
+* [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware)
+ * The (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion
+* [Docker](https://www.docker.com/)
-Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
+Other than having Vagrant, a suitable provider installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start an environment (either a virtual machine or container) that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
-# Flashing the Firmware
+## Flashing the Firmware
The "easy" way to flash the firmware is using a tool from your host OS:
@@ -19,3 +23,35 @@ The "easy" way to flash the firmware is using a tool from your host OS:
* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx)
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
+
+## Vagrantfile Overview
+The development environment is configured to run the QMK Docker image, `qmkfm/base_container`. This not only ensures predictability between systems, it also mirrors the CI environment.
+
+## FAQ
+
+### Why am I seeing issues under Virtualbox?
+Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:**
+
+```console
+vagrant plugin install vagrant-vbguest
+```
+
+### How do I remove an existing environment?
+Finished with your environment? From anywhere inside the folder where you checked out this project, Execute:
+
+```console
+vagrant destory
+```
+
+### What if I want to use Docker directly?
+Want to benefit from the Vagrant workflow without a virtual machine? The Vagrantfile is configured to bypass running a virtual machine, and run the container directly. Execute the following when bringing up the environment to force the use of Docker:
+```console
+vagrant up --provider=docker
+```
+
+### How do I access the virtual machine instead of the Docker container?
+Execute the following to bypass the `vagrant` user booting directly to the official qmk builder image:
+
+```console
+vagrant ssh -c 'sudo -i'
+``` \ No newline at end of file
diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md
index 4a47a92b1..317307e1b 100644
--- a/docs/i2c_driver.md
+++ b/docs/i2c_driver.md
@@ -73,7 +73,22 @@ STM32 MCUs allows a variety of pins to be configured as I2C pins depending on th
| `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:
+The ChibiOS I2C driver configuration depends on STM32 MCU:
+
+ STM32F1xx, STM32F2xx, STM32F4xx, STM32L0xx and STM32L1xx use I2Cv1;
+ STM32F0xx, STM32F3xx, STM32F7xx and STM32L4xx use I2Cv2;
+
+#### I2Cv1
+STM32 MCUs allow for different clock and duty parameters when configuring I2Cv1. These can be modified using the following parameters, using <https://www.playembedded.org/blog/stm32-i2c-chibios/#I2Cv1_configuration_structure> as a reference:
+
+| Variable | Default |
+|--------------------|------------------|
+| `I2C1_OPMODE` | `OPMODE_I2C` |
+| `I2C1_CLOCK_SPEED` | `100000` |
+| `I2C1_DUTY_CYCLE` | `STD_DUTY_CYCLE` |
+
+#### I2Cv2
+STM32 MCUs allow for different timing parameters when configuring I2Cv2. These can be modified using the following parameters, using <https://www.st.com/en/embedded-software/stsw-stm32126.html> as a reference:
| Variable | Default |
|-----------------------|---------|
@@ -83,13 +98,14 @@ STM32 MCUs allow for different timing parameters when configuring I2C. These can
| `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.
+STM32 MCUs allow for different "alternate function" modes when configuring GPIO pins. These are required to switch the pins used to I2Cv2 mode. See the respective datasheet for the appropriate values for your MCU.
| Variable | Default |
|---------------------|---------|
| `I2C1_SCL_PAL_MODE` | `4` |
| `I2C1_SDA_PAL_MODE` | `4` |
+#### Other
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:
```C
diff --git a/docs/newbs_flashing.md b/docs/newbs_flashing.md
index a985e5d2b..fa0a5e2ba 100644
--- a/docs/newbs_flashing.md
+++ b/docs/newbs_flashing.md
@@ -127,9 +127,7 @@ Once it does this, you'll want to reset the controller. It should then show out
>>> dfu-programmer atmega32u4 reset
```
-If you have any issues with this, you may need to this:
-
- sudo make <my_keyboard>:<my_keymap>:dfu
+?> If you have any issues with this - such as `dfu-programmer: no device present` - please see the [Frequently Asked Build Questions](faq_build.md).
#### DFU commands
diff --git a/docs/python_development.md b/docs/python_development.md
new file mode 100644
index 000000000..b976a7c0e
--- /dev/null
+++ b/docs/python_development.md
@@ -0,0 +1,45 @@
+# Python Development in QMK
+
+This document gives an overview of how QMK has structured its python code. You should read this before working on any of the python code.
+
+## Script directories
+
+There are two places scripts live in QMK: `qmk_firmware/bin` and `qmk_firmware/util`. You should use `bin` for any python scripts that utilize the `qmk` wrapper. Scripts that are standalone and not run very often live in `util`.
+
+We discourage putting anything into `bin` that does not utilize the `qmk` wrapper. If you think you have a good reason for doing so please talk to us about your use case.
+
+## Python Modules
+
+Most of the QMK python modules can be found in `qmk_firmware/lib/python`. This is the path that we append to `sys.path`.
+
+We have a module hierarchy under that path:
+
+* `qmk_firmware/lib/python`
+ * `milc.py` - The CLI library we use. Will be pulled out into its own module in the future.
+ * `qmk` - Code associated with QMK
+ * `cli` - Modules that will be imported for CLI commands.
+ * `errors.py` - Errors that can be raised within QMK apps
+ * `keymap.py` - Functions for working with keymaps
+
+## CLI Scripts
+
+We have a CLI wrapper that you should utilize for any user facing scripts. We think it's pretty easy to use and it gives you a lot of nice things for free.
+
+To use the wrapper simply place a module into `qmk_firmware/lib/python/qmk/cli`, and create a symlink to `bin/qmk` named after your module. Dashes in command names will be converted into dots so you can use hierarchy to manage commands.
+
+When `qmk` is run it checks to see how it was invoked. If it was invoked as `qmk` the module name is take from `sys.argv[1]`. If it was invoked as `qmk-<module-name>` then everything after the first dash is taken as the module name. Dashes and underscores are converted to dots, and then `qmk.cli` is prepended before the module is imported.
+
+The module uses `@cli.entrypoint()` and `@cli.argument()` decorators to define an entrypoint, which is where execution starts.
+
+## Example CLI Script
+
+We have provided a QMK Hello World script you can use as an example. To run it simply run `qmk hello` or `qmk-hello`. The source code is listed below.
+
+```
+from milc import cli
+
+@cli.argument('-n', '--name', default='World', help='Name to greet.')
+@cli.entrypoint('QMK Python Hello World.')
+def main(cli):
+ cli.echo('Hello, %s!', cli.config.general.name)
+```
diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c
index 5814375f3..cba5a1c67 100644
--- a/drivers/arm/i2c_master.c
+++ b/drivers/arm/i2c_master.c
@@ -33,11 +33,17 @@
static uint8_t i2c_address;
static const I2CConfig i2cconfig = {
+#ifdef USE_I2CV1
+ I2C1_OPMODE,
+ I2C1_CLOCK_SPEED,
+ I2C1_DUTY_CYCLE,
+#else
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
+#endif
};
static i2c_status_t chibios_to_qmk(const msg_t* status) {
@@ -61,8 +67,13 @@ void i2c_init(void)
chThdSleepMilliseconds(10);
+#ifdef USE_I2CV1
+ palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
+ palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
+#else
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);
+#endif
//i2cInit(); //This is invoked by halInit() so no need to redo it.
}
@@ -106,11 +117,11 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
return chibios_to_qmk(&status);
}
-i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
+i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
- msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
+ msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), &regaddr, 1, data, length, MS2ST(timeout));
return chibios_to_qmk(&status);
}
diff --git a/drivers/arm/i2c_master.h b/drivers/arm/i2c_master.h
index 1bb74c800..c8afa31e2 100644
--- a/drivers/arm/i2c_master.h
+++ b/drivers/arm/i2c_master.h
@@ -22,10 +22,16 @@
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
*/
+#pragma once
#include "ch.h"
#include <hal.h>
+
+#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
+ #define USE_I2CV1
+#endif
+
#ifdef I2C1_BANK
#define I2C1_SCL_BANK I2C1_BANK
#define I2C1_SDA_BANK I2C1_BANK
@@ -46,30 +52,42 @@
#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
+#ifdef USE_I2CV1
+ #ifndef I2C1_OPMODE
+ #define I2C1_OPMODE OPMODE_I2C
+ #endif
+ #ifndef I2C1_CLOCK_SPEED
+ #define I2C1_CLOCK_SPEED 100000 /* 400000 */
+ #endif
+ #ifndef I2C1_DUTY_CYCLE
+ #define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
+ #endif
+#else
+ // The default PAL alternate modes are used to signal that the pins are used for I2C
+ #ifndef I2C1_SCL_PAL_MODE
+ #define I2C1_SCL_PAL_MODE 4
+ #endif
+ #ifndef I2C1_SDA_PAL_MODE
+ #define I2C1_SDA_PAL_MODE 4
+ #endif
-// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
-// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
-#ifndef I2C1_TIMINGR_PRESC
- #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
+ // 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
#endif
#ifndef I2C_DRIVER
@@ -88,5 +106,5 @@ i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length,
i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
i2c_status_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout);
-i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
+i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
void i2c_stop(void);
diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c
index a7364bae0..0acc24642 100755
--- a/drivers/avr/i2c_master.c
+++ b/drivers/avr/i2c_master.c
@@ -1,3 +1,18 @@
+/* Copyright (C) 2019 Elia Ritterbusch
+ +
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
/* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-master-lib
*/
diff --git a/drivers/avr/i2c_master.h b/drivers/avr/i2c_master.h
index b4613115d..d68142430 100755
--- a/drivers/avr/i2c_master.h
+++ b/drivers/avr/i2c_master.h
@@ -1,3 +1,18 @@
+/* Copyright (C) 2019 Elia Ritterbusch
+ +
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
/* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-master-lib
*/
diff --git a/drivers/avr/i2c_slave.c b/drivers/avr/i2c_slave.c
index dbb9fb0df..4958a0f8e 100755
--- a/drivers/avr/i2c_slave.c
+++ b/drivers/avr/i2c_slave.c
@@ -1,3 +1,18 @@
+/* Copyright (C) 2019 Elia Ritterbusch
+ +
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
/* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-slave-lib
*/
@@ -68,4 +83,4 @@ ISR(TWI_vect){
// Reset i2c state machine to be ready for next interrupt
TWCR |= (1 << TWIE) | (1 << TWINT) | (ack << TWEA) | (1 << TWEN);
-} \ No newline at end of file
+}
diff --git a/drivers/avr/i2c_slave.h b/drivers/avr/i2c_slave.h
index 7b5dcbdc3..2f4589e9c 100755
--- a/drivers/avr/i2c_slave.h
+++ b/drivers/avr/i2c_slave.h
@@ -1,3 +1,18 @@
+/* Copyright (C) 2019 Elia Ritterbusch
+ +
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
/* Library made by: g4lvanix
* Github repository: https://github.com/g4lvanix/I2C-slave-lib
@@ -15,4 +30,4 @@ extern volatile uint8_t i2c_slave_reg[I2C_SLAVE_REG_COUNT];
void i2c_slave_init(uint8_t address);
void i2c_slave_stop(void);
-#endif // I2C_SLAVE_H \ No newline at end of file
+#endif // I2C_SLAVE_H
diff --git a/drivers/qwiic/qwiic.mk b/drivers/qwiic/qwiic.mk
index 4ae2d78e3..b23c25657 100644
--- a/drivers/qwiic/qwiic.mk
+++ b/drivers/qwiic/qwiic.mk
@@ -2,9 +2,7 @@ ifneq ($(strip $(QWIIC_ENABLE)),)
COMMON_VPATH += $(DRIVER_PATH)/qwiic
OPT_DEFS += -DQWIIC_ENABLE
SRC += qwiic.c
- ifeq ($(filter "i2c_master.c", $(SRC)),)
- SRC += i2c_master.c
- endif
+ QUANTUM_LIB_SRC += i2c_master.c
endif
ifneq ($(filter JOYSTIIC, $(QWIIC_ENABLE)),)
diff --git a/keyboards/1upkeyboards/1up60hse/rules.mk b/keyboards/1upkeyboards/1up60hse/rules.mk
index 72e6849e0..550241948 100644
--- a/keyboards/1upkeyboards/1up60hse/rules.mk
+++ b/keyboards/1upkeyboards/1up60hse/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
index 8567b780a..435a63181 100644
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
@@ -18,15 +18,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- ;
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c
index 42fcb6cf9..39edd00ff 100644
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c
@@ -18,15 +18,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- ;
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c
index 485010eef..0b0b51d59 100644
--- a/keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c
@@ -18,15 +18,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- ;
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/40percentclub/gherkin/keymaps/michel/config.h b/keyboards/40percentclub/gherkin/keymaps/michel/config.h
new file mode 100644
index 000000000..8696437a4
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/michel/config.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#undef RGB_DI_PIN
+#undef RGBLED_NUM
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 10
+
+/* Make layout upside down = USB port on left side */
+#undef MATRIX_ROW_PINS
+#undef MATRIX_COL_PINS
+#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+#define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
diff --git a/keyboards/40percentclub/gherkin/keymaps/michel/keymap.c b/keyboards/40percentclub/gherkin/keymaps/michel/keymap.c
new file mode 100644
index 000000000..dc2c13339
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/michel/keymap.c
@@ -0,0 +1,8 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x10(KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_ENT), LSFT_T(KC_Z), LALT_T(KC_X), LGUI_T(KC_C), KC_V, KC_BSPC, KC_SPC, RGUI_T(KC_B), LT(3, KC_N), LT(2, KC_M), KC_RSFT),
+ [1] = LAYOUT_ortho_3x10(KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT),
+ [2] = LAYOUT_ortho_3x10(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_NO, KC_SCLN, KC_NO, KC_QUOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT),
+ [3] = LAYOUT_ortho_3x10(KC_TAB, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)
+};
diff --git a/keyboards/40percentclub/gherkin/keymaps/michel/rules.mk b/keyboards/40percentclub/gherkin/keymaps/michel/rules.mk
new file mode 100644
index 000000000..77b529c0e
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/michel/rules.mk
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = no
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/half_n_half/rules.mk b/keyboards/40percentclub/half_n_half/rules.mk
index cc5fccee9..3b584f845 100644
--- a/keyboards/40percentclub/half_n_half/rules.mk
+++ b/keyboards/40percentclub/half_n_half/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/6ball/rules.mk b/keyboards/6ball/rules.mk
index 46f733b87..89d132480 100644
--- a/keyboards/6ball/rules.mk
+++ b/keyboards/6ball/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/9key/rules.mk b/keyboards/9key/rules.mk
index 9fae54fa9..eb82006fb 100644
--- a/keyboards/9key/rules.mk
+++ b/keyboards/9key/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/abstract/ellipse/rev1/config.h b/keyboards/abstract/ellipse/rev1/config.h
index a56bfba2f..36a4fc40f 100644
--- a/keyboards/abstract/ellipse/rev1/config.h
+++ b/keyboards/abstract/ellipse/rev1/config.h
@@ -125,11 +125,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-/* 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
@@ -239,7 +234,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #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/adkb96/rules.mk b/keyboards/adkb96/rules.mk
index 04986eb67..707fafd7c 100644
--- a/keyboards/adkb96/rules.mk
+++ b/keyboards/adkb96/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ai03/lunar/keymaps/via/rules.mk b/keyboards/ai03/lunar/keymaps/via/rules.mk
index 7c10c3fbb..01fcd55e8 100644
--- a/keyboards/ai03/lunar/keymaps/via/rules.mk
+++ b/keyboards/ai03/lunar/keymaps/via/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -83,4 +82,4 @@ HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
SRC += keyboards/wilba_tech/wt_main.c
RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file
+DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/ai03/lunar/rules.mk b/keyboards/ai03/lunar/rules.mk
index 8c2532574..6bb6d9ae9 100644
--- a/keyboards/ai03/lunar/rules.mk
+++ b/keyboards/ai03/lunar/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ai03/orbit/rules.mk b/keyboards/ai03/orbit/rules.mk
index 4b40e47cb..e225ad037 100644
--- a/keyboards/ai03/orbit/rules.mk
+++ b/keyboards/ai03/orbit/rules.mk
@@ -5,7 +5,6 @@ SRC += split_util.c \
matrix.c
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/al1/keymaps/default/keymap.c b/keyboards/al1/keymaps/default/keymap.c
index 5da3b5a7b..d571c05ab 100644
--- a/keyboards/al1/keymaps/default/keymap.c
+++ b/keyboards/al1/keymaps/default/keymap.c
@@ -31,23 +31,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_TRNS, KC_RGUI, KC_RCTRL, BL_TOGG, BL_DEC, BL_INC, KC_P0, KC_PDOT ),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/al1/keymaps/splitbs/keymap.c b/keyboards/al1/keymaps/splitbs/keymap.c
index 42bdfc7ec..51f35d0cf 100644
--- a/keyboards/al1/keymaps/splitbs/keymap.c
+++ b/keyboards/al1/keymaps/splitbs/keymap.c
@@ -15,22 +15,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_TRNS, KC_RGUI, KC_RCTRL, BL_TOGG, BL_DEC, BL_INC, KC_P0, KC_PDOT ),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/al1/rules.mk b/keyboards/al1/rules.mk
index 3930f9ade..6ae59c149 100644
--- a/keyboards/al1/rules.mk
+++ b/keyboards/al1/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -69,4 +68,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
CUSTOM_MATRIX = yes
-SRC += matrix.c \ No newline at end of file
+SRC += matrix.c
diff --git a/keyboards/alf/dc60/keymaps/default/keymap.c b/keyboards/alf/dc60/keymaps/default/keymap.c
index a4385bcc0..acd9753ef 100644
--- a/keyboards/alf/dc60/keymaps/default/keymap.c
+++ b/keyboards/alf/dc60/keymaps/default/keymap.c
@@ -33,22 +33,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/alf/dc60/rules.mk b/keyboards/alf/dc60/rules.mk
index 9ad6d7875..0e8f52e2b 100644
--- a/keyboards/alf/dc60/rules.mk
+++ b/keyboards/alf/dc60/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/alf/x11/info.json b/keyboards/alf/x11/info.json
index ca794f56c..54f2da66d 100644
--- a/keyboards/alf/x11/info.json
+++ b/keyboards/alf/x11/info.json
@@ -1,103 +1,112 @@
{
- "keyboard_name": "QMK80",
- "url": "",
- "maintainer": "qmk",
- "width": 18.25,
- "height": 6.5,
- "layouts": {
- "LAYOUT": {
- "key_count": 88,
- "layout": [
- {"label":"K00", "x":0, "y":0},
- {"label":"K01", "x":2, "y":0},
- {"label":"K02", "x":3, "y":0},
- {"label":"K03", "x":4, "y":0},
- {"label":"K04", "x":5, "y":0},
- {"label":"K05", "x":6.5, "y":0},
- {"label":"K06", "x":7.5, "y":0},
- {"label":"K07", "x":8.5, "y":0},
- {"label":"K08", "x":9.5, "y":0},
- {"label":"K09", "x":11, "y":0},
- {"label":"K0A", "x":12, "y":0},
- {"label":"K0B", "x":13, "y":0},
- {"label":"K0C", "x":14, "y":0},
- {"label":"K60", "x":15.25, "y":0},
- {"label":"K61", "x":16.25, "y":0},
- {"label":"K62", "x":17.25, "y":0},
- {"label":"K10", "x":0, "y":1.5},
- {"label":"K11", "x":1, "y":1.5},
- {"label":"K12", "x":2, "y":1.5},
- {"label":"K13", "x":3, "y":1.5},
- {"label":"K14", "x":4, "y":1.5},
- {"label":"K15", "x":5, "y":1.5},
- {"label":"K16", "x":6, "y":1.5},
- {"label":"K17", "x":7, "y":1.5},
- {"label":"K18", "x":8, "y":1.5},
- {"label":"K19", "x":9, "y":1.5},
- {"label":"K1A", "x":10, "y":1.5},
- {"label":"K1B", "x":11, "y":1.5},
- {"label":"K1C", "x":12, "y":1.5},
- {"label":"K5A", "x":13, "y":1.5, "w":2},
- {"label":"K63", "x":15.25, "y":1.5},
- {"label":"K65", "x":16.25, "y":1.5},
- {"label":"K67", "x":17.25, "y":1.5},
- {"label":"K20", "x":0, "y":2.5, "w":1.5},
- {"label":"K21", "x":1.5, "y":2.5},
- {"label":"K22", "x":2.5, "y":2.5},
- {"label":"K23", "x":3.5, "y":2.5},
- {"label":"K24", "x":4.5, "y":2.5},
- {"label":"K25", "x":5.5, "y":2.5},
- {"label":"K26", "x":6.5, "y":2.5},
- {"label":"K27", "x":7.5, "y":2.5},
- {"label":"K28", "x":8.5, "y":2.5},
- {"label":"K29", "x":9.5, "y":2.5},
- {"label":"K2A", "x":10.5, "y":2.5},
- {"label":"K2B", "x":11.5, "y":2.5},
- {"label":"K2C", "x":12.5, "y":2.5},
- {"label":"K4C", "x":13.5, "y":2.5, "w":1.5},
- {"label":"K64", "x":15.25, "y":2.5},
- {"label":"K66", "x":16.25, "y":2.5},
- {"label":"K68", "x":17.25, "y":2.5},
- {"label":"K30", "x":0, "y":3.5, "w":1.75},
- {"label":"K31", "x":1.75, "y":3.5},
- {"label":"K32", "x":2.75, "y":3.5},
- {"label":"K33", "x":3.75, "y":3.5},
- {"label":"K34", "x":4.75, "y":3.5},
- {"label":"K35", "x":5.75, "y":3.5},
- {"label":"K36", "x":6.75, "y":3.5},
- {"label":"K37", "x":7.75, "y":3.5},
- {"label":"K38", "x":8.75, "y":3.5},
- {"label":"K39", "x":9.75, "y":3.5},
- {"label":"K3A", "x":10.75, "y":3.5},
- {"label":"K3B", "x":11.75, "y":3.5},
- {"label":"K3C", "x":12.75, "y":3.5, "w":2.25},
- {"label":"K40", "x":0, "y":4.5, "w":2.25},
- {"label":"K41", "x":2.25, "y":4.5},
- {"label":"K42", "x":3.25, "y":4.5},
- {"label":"K43", "x":4.25, "y":4.5},
- {"label":"K44", "x":5.25, "y":4.5},
- {"label":"K45", "x":6.25, "y":4.5},
- {"label":"K46", "x":7.25, "y":4.5},
- {"label":"K47", "x":8.25, "y":4.5},
- {"label":"K48", "x":9.25, "y":4.5},
- {"label":"K49", "x":10.25, "y":4.5},
- {"label":"K4A", "x":11.25, "y":4.5},
- {"label":"K4B", "x":12.25, "y":4.5, "w":1.75},
- {"label":"K69", "x":14, "y":4.5},
- {"label":"K58", "x":16.25, "y":4.5},
- {"label":"K50", "x":0, "y":5.5, "w":1.25},
- {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
- {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
- {"label":"K53", "x":3.75, "y":5.5, "w":6.25},
- {"label":"K54", "x":10, "y":5.5, "w":1.25},
- {"label":"K55", "x":11.25, "y":5.5, "w":1.25},
- {"label":"K56", "x":12.5, "y":5.5, "w":1.25},
- {"label":"K57", "x":13.75, "y":5.5, "w":1.25},
- {"label":"K6A", "x":15.25, "y":5.5},
- {"label":"K59", "x":16.25, "y":5.5},
- {"label":"K6B", "x":17.25, "y":5.5}
- ]
- }
+ "keyboard_name": "x11",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 88,
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":2, "y":0},
+ {"label":"K02", "x":3, "y":0},
+ {"label":"K03", "x":4, "y":0},
+ {"label":"K04", "x":5, "y":0},
+ {"label":"K05", "x":6.5, "y":0},
+ {"label":"K06", "x":7.5, "y":0},
+ {"label":"K07", "x":8.5, "y":0},
+ {"label":"K08", "x":9.5, "y":0},
+ {"label":"K09", "x":11, "y":0},
+ {"label":"K0A", "x":12, "y":0},
+ {"label":"K0B", "x":13, "y":0},
+ {"label":"K0C", "x":14, "y":0},
+
+ {"label":"K62", "x":15.25, "y":0},
+ {"label":"K61", "x":16.25, "y":0},
+ {"label":"K60", "x":17.25, "y":0},
+
+ {"label":"K10", "x":0, "y":1.5},
+ {"label":"K11", "x":1, "y":1.5},
+ {"label":"K12", "x":2, "y":1.5},
+ {"label":"K13", "x":3, "y":1.5},
+ {"label":"K14", "x":4, "y":1.5},
+ {"label":"K15", "x":5, "y":1.5},
+ {"label":"K16", "x":6, "y":1.5},
+ {"label":"K17", "x":7, "y":1.5},
+ {"label":"K18", "x":8, "y":1.5},
+ {"label":"K19", "x":9, "y":1.5},
+ {"label":"K1A", "x":10, "y":1.5},
+ {"label":"K1B", "x":11, "y":1.5},
+ {"label":"K1C", "x":12, "y":1.5},
+ {"label":"K5A", "x":13, "y":1.5, "w":2},
+
+ {"label":"K63", "x":15.25, "y":1.5},
+ {"label":"K65", "x":16.25, "y":1.5},
+ {"label":"K67", "x":17.25, "y":1.5},
+
+ {"label":"K20", "x":0, "y":2.5, "w":1.5},
+ {"label":"K21", "x":1.5, "y":2.5},
+ {"label":"K22", "x":2.5, "y":2.5},
+ {"label":"K23", "x":3.5, "y":2.5},
+ {"label":"K24", "x":4.5, "y":2.5},
+ {"label":"K25", "x":5.5, "y":2.5},
+ {"label":"K26", "x":6.5, "y":2.5},
+ {"label":"K27", "x":7.5, "y":2.5},
+ {"label":"K28", "x":8.5, "y":2.5},
+ {"label":"K29", "x":9.5, "y":2.5},
+ {"label":"K2A", "x":10.5, "y":2.5},
+ {"label":"K2B", "x":11.5, "y":2.5},
+ {"label":"K2C", "x":12.5, "y":2.5},
+ {"label":"K4C", "x":13.5, "y":2.5, "w":1.5},
+
+ {"label":"K64", "x":15.25, "y":2.5},
+ {"label":"K66", "x":16.25, "y":2.5},
+ {"label":"K68", "x":17.25, "y":2.5},
+
+ {"label":"K30", "x":0, "y":3.5, "w":1.75},
+ {"label":"K31", "x":1.75, "y":3.5},
+ {"label":"K32", "x":2.75, "y":3.5},
+ {"label":"K33", "x":3.75, "y":3.5},
+ {"label":"K34", "x":4.75, "y":3.5},
+ {"label":"K35", "x":5.75, "y":3.5},
+ {"label":"K36", "x":6.75, "y":3.5},
+ {"label":"K37", "x":7.75, "y":3.5},
+ {"label":"K38", "x":8.75, "y":3.5},
+ {"label":"K39", "x":9.75, "y":3.5},
+ {"label":"K3A", "x":10.75, "y":3.5},
+ {"label":"K3B", "x":11.75, "y":3.5},
+ {"label":"K3C", "x":12.75, "y":3.5, "w":2.25},
+
+ {"label":"K40", "x":0, "y":4.5, "w":2.25},
+ {"label":"K41", "x":2.25, "y":4.5},
+ {"label":"K42", "x":3.25, "y":4.5},
+ {"label":"K43", "x":4.25, "y":4.5},
+ {"label":"K44", "x":5.25, "y":4.5},
+ {"label":"K45", "x":6.25, "y":4.5},
+ {"label":"K46", "x":7.25, "y":4.5},
+ {"label":"K47", "x":8.25, "y":4.5},
+ {"label":"K48", "x":9.25, "y":4.5},
+ {"label":"K49", "x":10.25, "y":4.5},
+ {"label":"K4A", "x":11.25, "y":4.5},
+ {"label":"K4B", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"K69", "x":14, "y":4.5},
+
+ {"label":"K58", "x":16.25, "y":4.5},
+
+ {"label":"K50", "x":0, "y":5.5, "w":1.25},
+ {"label":"K51", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K52", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K53", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K54", "x":10, "y":5.5, "w":1.25},
+ {"label":"K55", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"K56", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"K57", "x":13.75, "y":5.5, "w":1.25},
+
+ {"label":"K6A", "x":15.25, "y":5.5},
+ {"label":"K59", "x":16.25, "y":5.5},
+ {"label":"K6B", "x":17.25, "y":5.5}
+ ]
}
}
- \ No newline at end of file
+}
diff --git a/keyboards/alf/x11/keymaps/default/keymap.c b/keyboards/alf/x11/keymaps/default/keymap.c
index cd97dd0a2..f0747d345 100644
--- a/keyboards/alf/x11/keymaps/default/keymap.c
+++ b/keyboards/alf/x11/keymaps/default/keymap.c
@@ -15,64 +15,23 @@
*/
#include QMK_KEYBOARD_H
-// Defines the keycodes used by our macros in process_record_user
-enum custom_keycodes {
- QMKBEST = SAFE_RANGE,
- QMKURL
-};
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_PSCR, KC_SLCK, KC_PAUS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, \
- KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
- KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_CAPS, KC_A, \
- KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_LSFT, KC_Z, \
- KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_LCTL, \
- KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
- ),
- [1] = LAYOUT( \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_MPLY, KC_MSTP, RGB_TOG, RGB_MOD, \
- RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_VAD, RGB_SAD \
- ),
-
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPLY, KC_MSTP,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
};
-
-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/alf/x11/rules.mk b/keyboards/alf/x11/rules.mk
index 180c60a4a..d19b7c1ba 100644
--- a/keyboards/alf/x11/rules.mk
+++ b/keyboards/alf/x11/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/alf/x11/x11.c b/keyboards/alf/x11/x11.c
index b91de016e..9699918d5 100644
--- a/keyboards/alf/x11/x11.c
+++ b/keyboards/alf/x11/x11.c
@@ -16,48 +16,49 @@
#include "x11.h"
void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
- setPinOutput(C6);
- setPinOutput(E6);
- setPinOutput(C7);
- matrix_init_user();
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ setPinOutput(C6);
+ setPinOutput(E6);
+ setPinOutput(C7);
+ matrix_init_user();
}
void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
- matrix_scan_user();
+ 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
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
- return process_record_user(keycode, record);
+ 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)) {
- writePinLow(C6);
- } else {
- writePinHigh(C6);
- }
-
- if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
- writePinLow(E6);
- } else {
- writePinHigh(E6);
- }
-
- if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
- writePinLow(C7);
- } else {
- writePinHigh(C7);
- }
-
- led_set_user(usb_led);
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ writePinLow(C6);
+ } else {
+ writePinHigh(C6);
+ }
+
+ if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+ writePinLow(E6);
+ } else {
+ writePinHigh(E6);
+ }
+
+ if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+ writePinLow(C7);
+ } else {
+ writePinHigh(C7);
+ }
+
+ led_set_user(usb_led);
}
diff --git a/keyboards/alf/x11/x11.h b/keyboards/alf/x11/x11.h
index 53f3a3e34..2a1d886fd 100644
--- a/keyboards/alf/x11/x11.h
+++ b/keyboards/alf/x11/x11.h
@@ -26,18 +26,18 @@
* represents the switch matrix.
*/
#define LAYOUT( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K60, K61, K62, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K5A, K63, K65, K67, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K4C, K64, K66, K68, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
- K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K69, K58, \
- K50, K51, K52, K53, K54, K55, K56, K57, K6A, K59, K6B \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K62, K61, K60, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K5A, K63, K65, K67, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K4C, K64, K66, K68, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K69, K58, \
+ K50, K51, K52, K53, K54, K55, K56, K57, K6A, K59, K6B \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C }, \
- { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
- { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, KC_NO, KC_NO }, \
- { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, KC_NO }, \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, KC_NO, KC_NO }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, KC_NO }, \
}
diff --git a/keyboards/alf/x2/keymaps/default/keymap.c b/keyboards/alf/x2/keymaps/default/keymap.c
index 9470e38b5..eb3d7bd46 100644
--- a/keyboards/alf/x2/keymaps/default/keymap.c
+++ b/keyboards/alf/x2/keymaps/default/keymap.c
@@ -19,10 +19,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/alu84/keymaps/default/keymap.c b/keyboards/alu84/keymaps/default/keymap.c
index 8c0801070..4122978eb 100755
--- a/keyboards/alu84/keymaps/default/keymap.c
+++ b/keyboards/alu84/keymaps/default/keymap.c
@@ -55,15 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/amj40/keymaps/default/keymap.c b/keyboards/amj40/keymaps/default/keymap.c
index 884fb761d..951857de8 100755
--- a/keyboards/amj40/keymaps/default/keymap.c
+++ b/keyboards/amj40/keymaps/default/keymap.c
@@ -98,16 +98,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
-
- return MACRO_NONE;
-};
-
-
-
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
diff --git a/keyboards/amj40/rules.mk b/keyboards/amj40/rules.mk
index 18403ac32..b9f70de0f 100755
--- a/keyboards/amj40/rules.mk
+++ b/keyboards/amj40/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/keymap.c b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c
index 0c5dc6b88..4fbf87c65 100644
--- a/keyboards/amj60/keymaps/iso_split_rshift/keymap.c
+++ b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c
@@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PSCR, KC_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_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
- _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, RALT(KC_SPC),_______, _______, _______, _______, KC_VOLU, _______, \
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
/* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
@@ -88,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
_______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
- _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, _______, A(KC_F2), _______, _______, _______, _______, KC_PGUP, _______, \
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
/* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
@@ -111,21 +111,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- return (record->event.pressed ?
- MACRO( D(RALT), T(SPC), U(RALT), END )
- :MACRO( END ));
- break;
- case 1:
- return (record->event.pressed ?
- MACRO( D(LALT), T(F2), U(LALT), END )
- :MACRO( END ));
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/amj60/rules.mk b/keyboards/amj60/rules.mk
index 0df13d306..0e9f17d26 100644
--- a/keyboards/amj60/rules.mk
+++ b/keyboards/amj60/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -65,4 +63,4 @@ AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-LAYOUTS = 60_ansi \ No newline at end of file
+LAYOUTS = 60_ansi
diff --git a/keyboards/amj96/keymaps/default/keymap.c b/keyboards/amj96/keymaps/default/keymap.c
index 514c21668..a520fdeb3 100644
--- a/keyboards/amj96/keymaps/default/keymap.c
+++ b/keyboards/amj96/keymaps/default/keymap.c
@@ -36,22 +36,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/amj96/rules.mk b/keyboards/amj96/rules.mk
index 59451dee6..a90f0e75a 100644
--- a/keyboards/amj96/rules.mk
+++ b/keyboards/amj96/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/amjpad/rules.mk b/keyboards/amjpad/rules.mk
index f378a4ede..853bbf956 100644
--- a/keyboards/amjpad/rules.mk
+++ b/keyboards/amjpad/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/angel64/angel64.c b/keyboards/angel64/angel64.c
new file mode 100644
index 000000000..d26c3608b
--- /dev/null
+++ b/keyboards/angel64/angel64.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 kakunpc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "angel64.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+*/
diff --git a/keyboards/angel64/angel64.h b/keyboards/angel64/angel64.h
new file mode 100644
index 000000000..6c0898a56
--- /dev/null
+++ b/keyboards/angel64/angel64.h
@@ -0,0 +1,48 @@
+/* Copyright 2019 kakunpc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, \
+ k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, \
+ k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, \
+ k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, \
+ k54, k55, k56, k57, k58, k59, k60, k61, k62, k63, k64\
+) \
+{ \
+ { k01, k13, k25, k37, k49, k61 }, \
+ { k02, k14, k26, k38, k50, k62 }, \
+ { k03, k15, k27, k39, k51, k63 }, \
+ { k04, k16, k28, k40, k52, k64 }, \
+ { k05, k17, k29, k41, k53, KC_NO }, \
+ { k06, k18, k30, k42, k54, KC_NO }, \
+ { k07, k19, k31, k43, k55, KC_NO }, \
+ { k08, k20, k32, k44, k56, KC_NO }, \
+ { k09, k21, k33, k45, k57, KC_NO }, \
+ { k10, k22, k34, k46, k58, KC_NO }, \
+ { k11, k23, k35, k47, k59, KC_NO }, \
+ { k12, k24, k36, k48, k60, KC_NO } \
+}
diff --git a/keyboards/angel64/config.h b/keyboards/angel64/config.h
new file mode 100644
index 000000000..2289d6667
--- /dev/null
+++ b/keyboards/angel64/config.h
@@ -0,0 +1,242 @@
+/*
+Copyright 2019 kakunpc
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER kakunpc
+#define PRODUCT angel64
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+#define UNUSED_PINS
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 64
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 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/angel64/info.json b/keyboards/angel64/info.json
new file mode 100644
index 000000000..2bcd0c9ea
--- /dev/null
+++ b/keyboards/angel64/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "angel64",
+ "url": "https://kakunpc.booth.pm/",
+ "maintainer": "kakunpc",
+ "width": 14,
+ "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":"back", "x":13, "y":0}, {"label":"Q", "x":0, "y":1, "w":1.5}, {"label":"W", "x":1.5, "y":1}, {"label":"E", "x":2.5, "y":1}, {"label":"R", "x":3.5, "y":1}, {"label":"T", "x":4.5, "y":1}, {"label":"Y", "x":5.5, "y":1}, {"label":"U", "x":6.5, "y":1}, {"label":"I", "x":7.5, "y":1}, {"label":"O", "x":8.5, "y":1}, {"label":"P", "x":9.5, "y":1}, {"label":"[", "x":10.5, "y":1}, {"label":"]", "x":11.5, "y":1}, {"label":"|", "x":12.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2}, {"label":"A", "x":1, "y":2}, {"label":"S", "x":2, "y":2}, {"label":"D", "x":3, "y":2}, {"label":"F", "x":4, "y":2}, {"label":"G", "x":5, "y":2}, {"label":"H", "x":6, "y":2}, {"label":"J", "x":7, "y":2}, {"label":"K", "x":8, "y":2}, {"label":"L", "x":9, "y":2}, {"label":";:", "x":10, "y":2}, {"label":"`", "x":11, "y":2}, {"label":"Enter", "x":12, "y":2, "w":2}, {"label":"Shift", "x":0, "y":3, "w":1.5}, {"label":"Z", "x":1.5, "y":3}, {"label":"X", "x":2.5, "y":3}, {"label":"C", "x":3.5, "y":3}, {"label":"V", "x":4.5, "y":3}, {"label":"B", "x":5.5, "y":3}, {"label":"N", "x":6.5, "y":3}, {"label":"M", "x":7.5, "y":3}, {"label":"<", "x":8.5, "y":3}, {"label":">", "x":9.5, "y":3}, {"label":"?", "x":10.5, "y":3}, {"label":"\u2191", "x":11.5, "y":3}, {"label":"Fn", "x":12.5, "y":3, "w":1.5}, {"label":"Caps", "x":0, "y":4}, {"label":"Alt", "x":1, "y":4}, {"label":"Start", "x":2, "y":4, "w":1.5}, {"label":"Ctrl", "x":3.5, "y":4, "w":1.5}, {"label":"Space", "x":5, "y":4, "w":2}, {"label":"Ctrl", "x":7, "y":4, "w":1.5}, {"label":"Alt", "x":8.5, "y":4, "w":1.5}, {"label":"\u2190", "x":10, "y":4}, {"label":"\u2193", "x":11, "y":4}, {"label":"\u2192", "x":12, "y":4}, {"label":"Alt", "x":13, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/angel64/keymaps/default/config.h b/keyboards/angel64/keymaps/default/config.h
new file mode 100644
index 000000000..bf1149ebc
--- /dev/null
+++ b/keyboards/angel64/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 kakunpc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/angel64/keymaps/default/keymap.c b/keyboards/angel64/keymaps/default/keymap.c
new file mode 100644
index 000000000..50ca64fde
--- /dev/null
+++ b/keyboards/angel64/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/* Copyright 2019 kakunpc
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum layers{
+ BASE = 0,
+ COMMAND
+};
+
+#define KC_COMMAND LT(COMMAND,KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC ,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_COMMAND, KC_SPC, KC_COMMAND, KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL
+ ),
+ [COMMAND] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC ,
+ KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+void keyboard_post_init_user(void) {
+}
diff --git a/keyboards/angel64/keymaps/default/readme.md b/keyboards/angel64/keymaps/default/readme.md
new file mode 100644
index 000000000..f4cd48f2e
--- /dev/null
+++ b/keyboards/angel64/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for angel64 \ No newline at end of file
diff --git a/keyboards/angel64/matrix.c b/keyboards/angel64/matrix.c
new file mode 100644
index 000000000..e06fc15dc
--- /dev/null
+++ b/keyboards/angel64/matrix.c
@@ -0,0 +1,287 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+//Deprecated.
+bool matrix_is_modified(void)
+{
+ if (debounce_active()) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
+
+static void select_row(uint8_t row)
+{
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row)
+{
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_col(uint8_t col)
+{
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col)
+{
+ setPinInputHigh(col_pins[col]);
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
+ {
+ uint8_t tmp = row_index + MATRIX_ROWS/2;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[tmp];
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[tmp] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+void matrix_init(void) {
+
+ // initialize key pins
+ init_pins();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
+ changed |= read_cols_on_row(raw_matrix, current_row);
+ }
+ //else
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(raw_matrix, current_col);
+ }
+
+ debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+ matrix_scan_quantum();
+ return (uint8_t)changed;
+}
diff --git a/keyboards/angel64/readme.md b/keyboards/angel64/readme.md
new file mode 100644
index 000000000..b56592cbb
--- /dev/null
+++ b/keyboards/angel64/readme.md
@@ -0,0 +1,15 @@
+# angel64
+
+![angel64](https://i.gyazo.com/6e2ea6c58d3253c496dc0518f2641ff9.jpg)
+
+Keyboard for tablets.
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+Hardware Supported: angel64_alpha, promicro
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make angel64:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/angel64/rules.mk b/keyboards/angel64/rules.mk
new file mode 100644
index 000000000..b1ef9b765
--- /dev/null
+++ b/keyboards/angel64/rules.mk
@@ -0,0 +1,83 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = 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)
+CUSTOM_MATRIX = yes
+
+SRC += matrix.c
diff --git a/keyboards/atom47/keymaps/LEdiodes/rules.mk b/keyboards/atom47/keymaps/LEdiodes/rules.mk
index d446d3a69..9334aaf28 100644
--- a/keyboards/atom47/keymaps/LEdiodes/rules.mk
+++ b/keyboards/atom47/keymaps/LEdiodes/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/atom47/rules.mk b/keyboards/atom47/rules.mk
index 5f3dbb668..9a2cbc55a 100644
--- a/keyboards/atom47/rules.mk
+++ b/keyboards/atom47/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/atomic/keymaps/default/keymap.c b/keyboards/atomic/keymaps/default/keymap.c
index 55de476d1..6d314f147 100644
--- a/keyboards/atomic/keymaps/default/keymap.c
+++ b/keyboards/atomic/keymaps/default/keymap.c
@@ -95,7 +95,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL ,
KC_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_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN,
- M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
),
/* COLEMAK - MIT ENHANCED / GRID COMPATIBLE
@@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL ,
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN,
- M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
),
/* DVORAK - MIT ENHANCED / GRID COMPATIBLE
@@ -139,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL ,
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, KC_ENT, KC_ENT, KC_PGUP,
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_RSFT, KC_UP, KC_PGDN,
- M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+ BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
),
/* LOWERED
@@ -208,20 +208,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/atomic/rules.mk b/keyboards/atomic/rules.mk
index eee6c2530..2f9e2e713 100644
--- a/keyboards/atomic/rules.mk
+++ b/keyboards/atomic/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -68,4 +65,4 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = ortho_5x15 \ No newline at end of file
+LAYOUTS = ortho_5x15
diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c
index 631697384..bbe4bb51a 100644
--- a/keyboards/atreus/keymaps/default/keymap.c
+++ b/keyboards/atreus/keymaps/default/keymap.c
@@ -42,17 +42,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_VOLU, KC_NO, KC_NO, RESET, KC_NO, KC_F1, KC_F2, KC_F3, KC_F12 ,
KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS )
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/atreus62/keymaps/default/keymap.c b/keyboards/atreus62/keymaps/default/keymap.c
index e39f5ad12..06c7ae309 100644
--- a/keyboards/atreus62/keymaps/default/keymap.c
+++ b/keyboards/atreus62/keymaps/default/keymap.c
@@ -46,18 +46,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
*/
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- // MACRODOWN only works in this function
- switch (id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- }
- else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/atreus62/rules.mk b/keyboards/atreus62/rules.mk
index 66f6660c6..c9edfce0a 100644
--- a/keyboards/atreus62/rules.mk
+++ b/keyboards/atreus62/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/baguette/rules.mk b/keyboards/baguette/rules.mk
index 062ff1b22..de88b9798 100644
--- a/keyboards/baguette/rules.mk
+++ b/keyboards/baguette/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/bantam44/keymaps/default/keymap.c b/keyboards/bantam44/keymaps/default/keymap.c
index dff91d6c2..7f92da08d 100644
--- a/keyboards/bantam44/keymaps/default/keymap.c
+++ b/keyboards/bantam44/keymaps/default/keymap.c
@@ -23,8 +23,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_TRNS, KC_SPC, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT \
)
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
-{
- return MACRO_NONE;
-};
diff --git a/keyboards/bantam44/rules.mk b/keyboards/bantam44/rules.mk
index f245a3ba1..cebe7f464 100644
--- a/keyboards/bantam44/rules.mk
+++ b/keyboards/bantam44/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c b/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
index eb2d23682..d87471b00 100755
--- a/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
@@ -29,10 +29,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/1key/keymaps/default/keymap.c b/keyboards/bigseries/1key/keymaps/default/keymap.c
index 7ce837357..781205d42 100755
--- a/keyboards/bigseries/1key/keymaps/default/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/default/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/1key/keymaps/lock/keymap.c b/keyboards/bigseries/1key/keymaps/lock/keymap.c
index 3d3b002b0..650554e02 100755
--- a/keyboards/bigseries/1key/keymaps/lock/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/lock/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/1key/keymaps/tester/keymap.c b/keyboards/bigseries/1key/keymaps/tester/keymap.c
index 31553cef7..bfecdb38b 100755
--- a/keyboards/bigseries/1key/keymaps/tester/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/tester/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/2key/keymaps/default/keymap.c b/keyboards/bigseries/2key/keymaps/default/keymap.c
index 704649632..de430d24d 100755
--- a/keyboards/bigseries/2key/keymaps/default/keymap.c
+++ b/keyboards/bigseries/2key/keymaps/default/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
// Disable to set a known state
diff --git a/keyboards/bigseries/2key/keymaps/lock/keymap.c b/keyboards/bigseries/2key/keymaps/lock/keymap.c
index 55a9240f3..6acf62d48 100755
--- a/keyboards/bigseries/2key/keymaps/lock/keymap.c
+++ b/keyboards/bigseries/2key/keymaps/lock/keymap.c
@@ -29,10 +29,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/2key/keymaps/tester/keymap.c b/keyboards/bigseries/2key/keymaps/tester/keymap.c
index 5b574824d..025fd7349 100755
--- a/keyboards/bigseries/2key/keymaps/tester/keymap.c
+++ b/keyboards/bigseries/2key/keymaps/tester/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c b/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
index 8e5b10db8..d1410ecf1 100755
--- a/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
+++ b/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
@@ -29,10 +29,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/3key/keymaps/default/keymap.c b/keyboards/bigseries/3key/keymaps/default/keymap.c
index 6f0ffc9e1..3d3f4923d 100755
--- a/keyboards/bigseries/3key/keymaps/default/keymap.c
+++ b/keyboards/bigseries/3key/keymaps/default/keymap.c
@@ -27,10 +27,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/3key/keymaps/tester/keymap.c b/keyboards/bigseries/3key/keymaps/tester/keymap.c
index 896a781fc..a201acd7e 100755
--- a/keyboards/bigseries/3key/keymaps/tester/keymap.c
+++ b/keyboards/bigseries/3key/keymaps/tester/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/4key/keymaps/default/keymap.c b/keyboards/bigseries/4key/keymaps/default/keymap.c
index 1c65f44b0..4d662a27b 100755
--- a/keyboards/bigseries/4key/keymaps/default/keymap.c
+++ b/keyboards/bigseries/4key/keymaps/default/keymap.c
@@ -29,10 +29,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/bigseries/4key/keymaps/tester/keymap.c b/keyboards/bigseries/4key/keymaps/tester/keymap.c
index 5d5fe0d38..021c7c4b6 100755
--- a/keyboards/bigseries/4key/keymaps/tester/keymap.c
+++ b/keyboards/bigseries/4key/keymaps/tester/keymap.c
@@ -28,10 +28,6 @@ LAYOUT(
bool initialized = 0;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
if (!initialized){
dprintf("Initializing in matrix_scan_user");
diff --git a/keyboards/blockey/rules.mk b/keyboards/blockey/rules.mk
index fb628cfaa..cea24f832 100644
--- a/keyboards/blockey/rules.mk
+++ b/keyboards/blockey/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/boston_meetup/2019/config.h b/keyboards/boston_meetup/2019/config.h
index 565281644..fa3dda730 100644
--- a/keyboards/boston_meetup/2019/config.h
+++ b/keyboards/boston_meetup/2019/config.h
@@ -26,7 +26,6 @@
#define MATRIX_ROW_PINS { A3, B8, B9, B1 }
#define MATRIX_COL_PINS { A7, A8, B2, B10 }
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B13 }
#define ENCODERS_PAD_B { B14 }
@@ -142,7 +141,7 @@
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* default 3V ERM vibration motor voltage and library*/
-#if FB_ERM_LRA == 0
+#if FB_ERM_LRA == 0
#define RATED_VOLTAGE 3
#define V_RMS 2.3
#define V_PEAK 3.30
@@ -193,4 +192,3 @@
#define RGB_MATRIX_KEYPRESSES
#define SOLENOID_PIN A14
-
diff --git a/keyboards/bpiphany/frosty_flake/rules.mk b/keyboards/bpiphany/frosty_flake/rules.mk
index 94619e03d..74d24b840 100644
--- a/keyboards/bpiphany/frosty_flake/rules.mk
+++ b/keyboards/bpiphany/frosty_flake/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u2
# Processor frequency.
diff --git a/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
index 3ad3247d4..bd909c288 100644
--- a/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
@@ -14,22 +14,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/bpiphany/kitten_paw/rules.mk b/keyboards/bpiphany/kitten_paw/rules.mk
index fab9c422f..68c31d302 100644
--- a/keyboards/bpiphany/kitten_paw/rules.mk
+++ b/keyboards/bpiphany/kitten_paw/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u2
# Processor frequency.
diff --git a/keyboards/bpiphany/tiger_lily/rules.mk b/keyboards/bpiphany/tiger_lily/rules.mk
index 8f07bb006..d471ceb2e 100644
--- a/keyboards/bpiphany/tiger_lily/rules.mk
+++ b/keyboards/bpiphany/tiger_lily/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u2
# Processor frequency.
diff --git a/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
index 0576cb242..3c2308835 100644
--- a/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
@@ -25,22 +25,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
index afae406b1..783e37196 100644
--- a/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
@@ -25,22 +25,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/bpiphany/unloved_bastard/rules.mk b/keyboards/bpiphany/unloved_bastard/rules.mk
index 2db321c57..aa3346b5c 100644
--- a/keyboards/bpiphany/unloved_bastard/rules.mk
+++ b/keyboards/bpiphany/unloved_bastard/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u2
# Processor frequency.
diff --git a/keyboards/bthlabs/geekpad/rules.mk b/keyboards/bthlabs/geekpad/rules.mk
index d4785aabb..f51259b29 100644
--- a/keyboards/bthlabs/geekpad/rules.mk
+++ b/keyboards/bthlabs/geekpad/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/business_card/rules.mk b/keyboards/business_card/rules.mk
index c12d659d0..d0b8a2367 100644
--- a/keyboards/business_card/rules.mk
+++ b/keyboards/business_card/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/cannonkeys/ortho75/config.h b/keyboards/cannonkeys/ortho75/config.h
index 6c240e2d6..588e2b921 100644
--- a/keyboards/cannonkeys/ortho75/config.h
+++ b/keyboards/cannonkeys/ortho75/config.h
@@ -39,7 +39,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B9 }
#define ENCODERS_PAD_B { B8 }
diff --git a/keyboards/cannonkeys/satisfaction75/config.h b/keyboards/cannonkeys/satisfaction75/config.h
index 092b37257..1cbe43fad 100644
--- a/keyboards/cannonkeys/satisfaction75/config.h
+++ b/keyboards/cannonkeys/satisfaction75/config.h
@@ -35,7 +35,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { B3, B4, A0, A2, A4, A3 }
#define DIODE_DIRECTION COL2ROW
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B9 }
#define ENCODERS_PAD_B { B8 }
diff --git a/keyboards/cannonkeys/satisfaction75/i2c_master.c b/keyboards/cannonkeys/satisfaction75/i2c_master.c
index 56e810d32..0e3adbbf1 100644
--- a/keyboards/cannonkeys/satisfaction75/i2c_master.c
+++ b/keyboards/cannonkeys/satisfaction75/i2c_master.c
@@ -110,11 +110,11 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data,
return chibios_to_qmk(status);
}
-i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
+i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
{
i2c_address = devaddr;
i2cStart(&I2C_DRIVER, &i2cconfig);
- msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
+ msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), &regaddr, 1, data, length, MS2ST(timeout));
return chibios_to_qmk(status);
}
diff --git a/keyboards/cannonkeys/stm32f072/keyboard.c b/keyboards/cannonkeys/stm32f072/keyboard.c
index 02c6dae18..c0c3a74fb 100644
--- a/keyboards/cannonkeys/stm32f072/keyboard.c
+++ b/keyboards/cannonkeys/stm32f072/keyboard.c
@@ -162,7 +162,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
}
#endif //DYNAMIC_KEYMAP_ENABLE
- return true;
+ return process_record_user(keycode, record);;
}
diff --git a/keyboards/catch22/keymaps/default/keymap.c b/keyboards/catch22/keymaps/default/keymap.c
index 3216c0270..abe88df23 100644
--- a/keyboards/catch22/keymaps/default/keymap.c
+++ b/keyboards/catch22/keymaps/default/keymap.c
@@ -19,8 +19,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______ \
),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
-{
- return MACRO_NONE;
-};
diff --git a/keyboards/chimera_ergo/keymaps/default/keymap.c b/keyboards/chimera_ergo/keymaps/default/keymap.c
index 0b60b1daf..51ab0e92c 100644
--- a/keyboards/chimera_ergo/keymaps/default/keymap.c
+++ b/keyboards/chimera_ergo/keymaps/default/keymap.c
@@ -17,6 +17,14 @@ enum chimera_ergo_layers
_NAV
};
+enum custom_keycodes {
+ SC_INCL = SAFE_RANGE,
+ SC_PULL,
+ SC_PUSH,
+ SC_SCAP,
+ SC_SCOF
+};
+
#define SC_NMPD TG(_NUMPAD)
#define SC_SYMB TG(_SYMBOLS)
#define SC_SPFN LT(_NAV,KC_EQL)
@@ -26,11 +34,6 @@ enum chimera_ergo_layers
#define SC_SPRT MT(MOD_LALT, KC_1)
#define SC_GBRC MT(MOD_RGUI, KC_RBRC)
#define SC_MESC LT(_MACROS, KC_ESC)
-#define SC_INCL M(0)
-#define SC_PULL M(1)
-#define SC_PUSH M(2)
-#define SC_SCAP M(3)
-#define SC_SCOF M(4)
#define SC_CAD LALT(LCTL(KC_DEL))
#define LONGPRESS_DELAY 150
@@ -88,47 +91,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
/* include some kind of library or header */
- case 0:
+ case SC_INCL:
if (record->event.pressed) {
SEND_STRING("#include <>");
- return MACRO( T(LEFT), END);
+ tap_code(KC_LEFT);
}
- break;
- case 1:
+ return false;
+ case SC_PULL:
if (record->event.pressed) {
SEND_STRING("git pull");
- return MACRO( T(ENT), END );
+ tap_code(KC_ENT);
}
- break;
- case 2:
- if (record->event.pressed){
+ return false;
+ case SC_PUSH:
+ if (record->event.pressed) {
SEND_STRING("git push");
- return MACRO( T(ENT), END );
+ tap_code(KC_ENT);
}
- break;
- case 3:
- if (record->event.pressed){
+ return false;
+ case SC_SCAP:
+ if (record->event.pressed) {
layer_on(_CAPS);
- register_code(KC_CAPSLOCK);
- unregister_code(KC_CAPSLOCK);
+ tap_code(KC_CAPS);
}
- break;
- case 4:
- if (record->event.pressed){
+ return false;
+ case SC_SCOF:
+ if (record->event.pressed) {
layer_off(_CAPS);
- register_code(KC_CAPSLOCK);
- unregister_code(KC_CAPSLOCK);
+ tap_code(KC_CAPS);
}
- break;
+ return false;
+ default:
+ return true;
}
- return MACRO_NONE;
+ return true;
};
-
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
diff --git a/keyboards/chimera_ergo/rules.mk b/keyboards/chimera_ergo/rules.mk
index 379da9ae7..0903e5e38 100644
--- a/keyboards/chimera_ergo/rules.mk
+++ b/keyboards/chimera_ergo/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/chimera_ls/rules.mk b/keyboards/chimera_ls/rules.mk
index 497e58677..bc3e4a865 100644
--- a/keyboards/chimera_ls/rules.mk
+++ b/keyboards/chimera_ls/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/chimera_ortho/rules.mk b/keyboards/chimera_ortho/rules.mk
index 4f95949f9..c4ff50dd2 100644
--- a/keyboards/chimera_ortho/rules.mk
+++ b/keyboards/chimera_ortho/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/christmas_tree/rules.mk b/keyboards/christmas_tree/rules.mk
index 741747eca..ec73e527b 100644
--- a/keyboards/christmas_tree/rules.mk
+++ b/keyboards/christmas_tree/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ckeys/handwire_101/rules.mk b/keyboards/ckeys/handwire_101/rules.mk
index 957a6c8fb..cf904d93c 100755
--- a/keyboards/ckeys/handwire_101/rules.mk
+++ b/keyboards/ckeys/handwire_101/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ckeys/nakey/keymaps/default/keymap.c b/keyboards/ckeys/nakey/keymaps/default/keymap.c
index ee14c1716..be147b2d8 100644
--- a/keyboards/ckeys/nakey/keymaps/default/keymap.c
+++ b/keyboards/ckeys/nakey/keymaps/default/keymap.c
@@ -25,21 +25,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/ckeys/nakey/rules.mk b/keyboards/ckeys/nakey/rules.mk
index 36b2193aa..4ba89cee4 100644
--- a/keyboards/ckeys/nakey/rules.mk
+++ b/keyboards/ckeys/nakey/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ckeys/obelus/rules.mk b/keyboards/ckeys/obelus/rules.mk
index f40610ee9..7b556b23c 100644
--- a/keyboards/ckeys/obelus/rules.mk
+++ b/keyboards/ckeys/obelus/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/claw44/rules.mk b/keyboards/claw44/rules.mk
index 907a5c832..c27f399ff 100644
--- a/keyboards/claw44/rules.mk
+++ b/keyboards/claw44/rules.mk
@@ -6,7 +6,6 @@ SRC += ssd1306.c
# CFLAGS += -flto
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/clueboard/66_hotswap/keymaps/json/keymap.json b/keyboards/clueboard/66_hotswap/keymaps/json/keymap.json
new file mode 100644
index 000000000..20aa9f0f6
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/keymaps/json/keymap.json
@@ -0,0 +1 @@
+{"keyboard":"clueboard/66_hotswap/gen1","keymap":"default_66","layout":"LAYOUT","layers":[["KC_GESC","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_MINS","KC_EQL","KC_BSPC","KC_PGUP","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_LBRC","KC_RBRC","KC_BSLS","KC_PGDN","KC_CAPS","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_ENT","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_RSFT","KC_UP","KC_LCTL","KC_LGUI","KC_LALT","KC_SPC","KC_SPC","KC_RALT","KC_RGUI","MO(1)","KC_RCTL","KC_LEFT","KC_DOWN","KC_RGHT"],["KC_GRV","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11","KC_F12","KC_DEL","BL_INC","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_MPRV","KC_MPLY","KC_MNXT","KC_NO","KC_MUTE","BL_DEC","KC_NO","KC_NO","MO(2)","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_PGUP","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","MO(1)","KC_NO","KC_HOME","KC_PGDN","KC_END"],["KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","BL_TOGG","BL_INC","KC_NO","KC_NO","KC_NO","KC_NO","RESET","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","BL_DEC","KC_NO","KC_NO","MO(2)","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","BL_STEP","KC_NO","KC_NO","MO(1)","KC_NO","KC_NO","KC_NO","KC_NO"]],"author":"","notes":""} \ No newline at end of file
diff --git a/keyboards/comet46/rules.mk b/keyboards/comet46/rules.mk
index 897cc9b8c..fc00e205b 100644
--- a/keyboards/comet46/rules.mk
+++ b/keyboards/comet46/rules.mk
@@ -4,7 +4,6 @@ SRC += matrix.c \
ssd1306.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/converter/hp_46010a/rules.mk b/keyboards/converter/hp_46010a/rules.mk
index 25be64999..797258caf 100644
--- a/keyboards/converter/hp_46010a/rules.mk
+++ b/keyboards/converter/hp_46010a/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/converter/ibm_5291/rules.mk b/keyboards/converter/ibm_5291/rules.mk
index 57e385f0a..457dad166 100644
--- a/keyboards/converter/ibm_5291/rules.mk
+++ b/keyboards/converter/ibm_5291/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/converter/modelm101/rules.mk b/keyboards/converter/modelm101/rules.mk
index 620526971..4c05d9b85 100644
--- a/keyboards/converter/modelm101/rules.mk
+++ b/keyboards/converter/modelm101/rules.mk
@@ -1,6 +1,5 @@
# MCU name
MCU = at90usb1286
-#MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
diff --git a/keyboards/crkbd/keymaps/default/rules.mk b/keyboards/crkbd/keymaps/default/rules.mk
index 16deaf45d..f84e5b2af 100644
--- a/keyboards/crkbd/keymaps/default/rules.mk
+++ b/keyboards/crkbd/keymaps/default/rules.mk
@@ -1,25 +1,4 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
# If you want to change the display of OLED, you need to change here
SRC += ./lib/glcdfont.c \
./lib/rgb_state_reader.c \
diff --git a/keyboards/crkbd/keymaps/vxid/README.md b/keyboards/crkbd/keymaps/vxid/README.md
new file mode 100644
index 000000000..7b0f9b8af
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/README.md
@@ -0,0 +1,3 @@
+# Vxid crkbd layout
+
+Inspired by sdothum's wide planck layout.
diff --git a/keyboards/crkbd/keymaps/vxid/config.h b/keyboards/crkbd/keymaps/vxid/config.h
new file mode 100644
index 000000000..bbf76d705
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/config.h
@@ -0,0 +1,44 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+#define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/crkbd/keymaps/vxid/keymap.c b/keyboards/crkbd/keymaps/vxid/keymap.c
new file mode 100644
index 000000000..e1c73caeb
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/keymap.c
@@ -0,0 +1,85 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+extern uint8_t is_master;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE
+};
+
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ Q, W, E, R, T, ESC, DEL, Y, U, I, O, P,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ A, S, D, F, G, SPC, BSPC, H, J, K, L, SCLN,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ Z, X, C, V, B, TAB, ENT, N, M, COMM, DOT, SLSH,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LALT, LGUI, LCTL, LSFT, RAISE, LOWER \
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc( \
+ //,-----------------------------------------. ,------------------------------------------.
+ 1, 2, 3, 4, 5, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ 6, 7, 8, 9, 0, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ EQL, PLUS, MINS, SLSH, ASTR, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+-------+------+------+------+------+------|
+ LALT, LGUI, LCTL, LSFT, RAISE, LOWER \
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc( \
+ //,-----------------------------------------. ,------------------------------------------.
+ EXLM, AT, HASH, DLR, PERC, LPRN, RPRN, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ CIRC, AMPR, ASTR, QUOT, DQUO, LCBR, RCBR, LEFT, DOWN, UP, RIGHT, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ BSLS, TILD, GRV, UNDS, PIPE, LBRC, RBRC, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+-------+------+------+------+------+------|
+ LALT, LGUI, LCTL, LSFT, RAISE, LOWER \
+ //`--------------------' `--------------------'
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/vxid/rules.mk b/keyboards/crkbd/keymaps/vxid/rules.mk
new file mode 100644
index 000000000..83e87ecf9
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/rules.mk
@@ -0,0 +1,31 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/rev1/rev1.c b/keyboards/crkbd/rev1/rev1.c
index 38ab92788..b969b5e28 100644
--- a/keyboards/crkbd/rev1/rev1.c
+++ b/keyboards/crkbd/rev1/rev1.c
@@ -6,13 +6,6 @@
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
-#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
-
#ifdef RGB_MATRIX_ENABLE
// Logical Layout
diff --git a/keyboards/crkbd/rules.mk b/keyboards/crkbd/rules.mk
index 426ed0c03..73efe23d0 100644
--- a/keyboards/crkbd/rules.mk
+++ b/keyboards/crkbd/rules.mk
@@ -6,7 +6,6 @@ SRC += ssd1306.c
# CFLAGS += -flto
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -55,7 +54,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+MOUSEKEY_ENABLE = yes # 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
@@ -65,9 +64,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-SUBPROJECT_rev1 = no
-USE_I2C = yes
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/cu24/keymaps/default/keymap.c b/keyboards/cu24/keymaps/default/keymap.c
index bbec2907a..e6db359ed 100644
--- a/keyboards/cu24/keymaps/default/keymap.c
+++ b/keyboards/cu24/keymaps/default/keymap.c
@@ -35,22 +35,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-/* Use this function to add macros */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
diff --git a/keyboards/cu24/rules.mk b/keyboards/cu24/rules.mk
index 86f1a8479..01d74ac47 100644
--- a/keyboards/cu24/rules.mk
+++ b/keyboards/cu24/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/cu75/keymaps/default/keymap.c b/keyboards/cu75/keymaps/default/keymap.c
index 0040473fb..c78c5cd12 100644
--- a/keyboards/cu75/keymaps/default/keymap.c
+++ b/keyboards/cu75/keymaps/default/keymap.c
@@ -58,15 +58,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/cu75/keymaps/iso/keymap.c b/keyboards/cu75/keymaps/iso/keymap.c
index 358a1e11e..18bd9a59a 100644
--- a/keyboards/cu75/keymaps/iso/keymap.c
+++ b/keyboards/cu75/keymaps/iso/keymap.c
@@ -57,15 +57,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/daisy/rules.mk b/keyboards/daisy/rules.mk
index 8157b168e..5a7cc564c 100644
--- a/keyboards/daisy/rules.mk
+++ b/keyboards/daisy/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -63,4 +62,4 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/dc01/arrow/rules.mk b/keyboards/dc01/arrow/rules.mk
index 0bd090bab..8426df1bd 100644
--- a/keyboards/dc01/arrow/rules.mk
+++ b/keyboards/dc01/arrow/rules.mk
@@ -2,7 +2,6 @@ SRC += matrix.c \
i2c_slave.c
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -71,4 +70,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
NO_USB_STARTUP_CHECK = yes # Disable initialization only when usb is plugged in
-CUSTOM_MATRIX = yes # Use custom matrix \ No newline at end of file
+CUSTOM_MATRIX = yes # Use custom matrix
diff --git a/keyboards/dc01/left/rules.mk b/keyboards/dc01/left/rules.mk
index 515b6b3dd..8a0d06195 100644
--- a/keyboards/dc01/left/rules.mk
+++ b/keyboards/dc01/left/rules.mk
@@ -2,7 +2,6 @@ SRC += matrix.c \
i2c_master.c
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/dc01/numpad/rules.mk b/keyboards/dc01/numpad/rules.mk
index 9def53dd5..420534f8c 100644
--- a/keyboards/dc01/numpad/rules.mk
+++ b/keyboards/dc01/numpad/rules.mk
@@ -2,7 +2,6 @@ SRC += matrix.c \
i2c_slave.c
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/dc01/right/rules.mk b/keyboards/dc01/right/rules.mk
index 0bd090bab..8426df1bd 100644
--- a/keyboards/dc01/right/rules.mk
+++ b/keyboards/dc01/right/rules.mk
@@ -2,7 +2,6 @@ SRC += matrix.c \
i2c_slave.c
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -71,4 +70,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
NO_USB_STARTUP_CHECK = yes # Disable initialization only when usb is plugged in
-CUSTOM_MATRIX = yes # Use custom matrix \ No newline at end of file
+CUSTOM_MATRIX = yes # Use custom matrix
diff --git a/keyboards/deltasplit75/rules.mk b/keyboards/deltasplit75/rules.mk
index 5c7571b9d..eadea1892 100644
--- a/keyboards/deltasplit75/rules.mk
+++ b/keyboards/deltasplit75/rules.mk
@@ -4,7 +4,6 @@ SRC += matrix.c \
serial.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/dichotomy/rules.mk b/keyboards/dichotomy/rules.mk
index 4dbc999b7..1cced0647 100755
--- a/keyboards/dichotomy/rules.mk
+++ b/keyboards/dichotomy/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/diverge3/rules.mk b/keyboards/diverge3/rules.mk
index 36e8ccb47..3888ee937 100644
--- a/keyboards/diverge3/rules.mk
+++ b/keyboards/diverge3/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/divergetm2/rules.mk b/keyboards/divergetm2/rules.mk
index 084a3bf63..f330bd790 100644
--- a/keyboards/divergetm2/rules.mk
+++ b/keyboards/divergetm2/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/do60/keymaps/default/keymap.c b/keyboards/do60/keymaps/default/keymap.c
index f8e4a5e92..8ade985b3 100644
--- a/keyboards/do60/keymaps/default/keymap.c
+++ b/keyboards/do60/keymaps/default/keymap.c
@@ -20,21 +20,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// Macros
-/*
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) { register_code(KC_RSFT); }
- else { unregister_code(KC_RSFT); }
- break;
- }
-
- return MACRO_NONE;
-};
-*/
// Loop
void matrix_scan_user(void) {
// Empty
diff --git a/keyboards/do60/keymaps/test/keymap.c b/keyboards/do60/keymaps/test/keymap.c
index f145177b0..9e81ce1ea 100644
--- a/keyboards/do60/keymaps/test/keymap.c
+++ b/keyboards/do60/keymaps/test/keymap.c
@@ -21,21 +21,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// Macros
-/*
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) { register_code(KC_RSFT); }
- else { unregister_code(KC_RSFT); }
- break;
- }
-
- return MACRO_NONE;
-};
-*/
// Loop
void matrix_scan_user(void) {
// Empty
diff --git a/keyboards/donutcables/scrabblepad/keymaps/default/keymap.c b/keyboards/donutcables/scrabblepad/keymaps/default/keymap.c
index 6f97d87e1..bb78e7131 100644
--- a/keyboards/donutcables/scrabblepad/keymaps/default/keymap.c
+++ b/keyboards/donutcables/scrabblepad/keymaps/default/keymap.c
@@ -35,22 +35,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/doro67/regular/rules.mk b/keyboards/doro67/regular/rules.mk
index 831bd0e61..360c00813 100644
--- a/keyboards/doro67/regular/rules.mk
+++ b/keyboards/doro67/regular/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/doro67/rgb/rules.mk b/keyboards/doro67/rgb/rules.mk
index 6438868dc..36001da3a 100644
--- a/keyboards/doro67/rgb/rules.mk
+++ b/keyboards/doro67/rgb/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/dozen0/rules.mk b/keyboards/dozen0/rules.mk
index 383a3594b..bc370be03 100644
--- a/keyboards/dozen0/rules.mk
+++ b/keyboards/dozen0/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c b/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c
index 332db66e6..e7dff55d0 100644
--- a/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c
+++ b/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c
@@ -33,7 +33,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______ \
),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
diff --git a/keyboards/duck/jetfire/keymaps/default/keymap.c b/keyboards/duck/jetfire/keymaps/default/keymap.c
index da0081a75..9377ef002 100644
--- a/keyboards/duck/jetfire/keymaps/default/keymap.c
+++ b/keyboards/duck/jetfire/keymaps/default/keymap.c
@@ -26,22 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_COMM),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/duck/jetfire/rules.mk b/keyboards/duck/jetfire/rules.mk
index c70859329..dceddc7c7 100644
--- a/keyboards/duck/jetfire/rules.mk
+++ b/keyboards/duck/jetfire/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/duck/lightsaver/keymaps/default/keymap.c b/keyboards/duck/lightsaver/keymaps/default/keymap.c
index d945ada24..346a87e3e 100644
--- a/keyboards/duck/lightsaver/keymaps/default/keymap.c
+++ b/keyboards/duck/lightsaver/keymaps/default/keymap.c
@@ -42,7 +42,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), \
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h
index 9000ba64d..de18faf62 100644
--- a/keyboards/dz60/dz60.h
+++ b/keyboards/dz60/dz60.h
@@ -494,4 +494,31 @@
{ k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, KC_NO,k4d, k4e } \
}
+/* LAYOUT_60_2_function
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │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 │46 │4a │4c │4d │4e │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┘
+*/
+#define LAYOUT_60_2_function( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
+ k40, k41, k43, k46, k4a, k4c, k4d, k4e \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, KC_NO, k4c, k4d, k4e } \
+}
+
#endif
diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json
index d1be70bdd..06ce36272 100644
--- a/keyboards/dz60/info.json
+++ b/keyboards/dz60/info.json
@@ -72,6 +72,10 @@
"LAYOUT_60_iso_split_space_bs_rshift": {
"key_count": 66,
"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":"Del", "x":13, "y":0, "w":1}, {"label":"Backspace", "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":"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":1.75}, {"label":"Print screen", "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":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_2_function": {
+ "key_count": 63,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"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":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Control", "x":11.5, "y":4, "w":1.5}, {"label":"GUI", "x":13, "y":4}, {"label":"Fn2", "x":14, "y":4}]
+ }
}
}
diff --git a/keyboards/dz60/keymaps/billiams/keymap.c b/keyboards/dz60/keymaps/billiams/keymap.c
index b1c75d903..b59040d77 100644
--- a/keyboards/dz60/keymaps/billiams/keymap.c
+++ b/keyboards/dz60/keymaps/billiams/keymap.c
@@ -4,9 +4,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ |
* |-----------------------------------------------------------------------------------------+
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bkspc |
* |-----------------------------------------------------------------------------------------+
* | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
* |-----------------------------------------------------------------------------------------+
@@ -17,8 +17,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
LAYOUT_directional(
- KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
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, _______, RSFT_T(KC_SLSH) , KC_UP, KC_ESCAPE,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
diff --git a/keyboards/dz60/keymaps/billiams/readme.md b/keyboards/dz60/keymaps/billiams/readme.md
index 5c0431e23..0f917bf41 100644
--- a/keyboards/dz60/keymaps/billiams/readme.md
+++ b/keyboards/dz60/keymaps/billiams/readme.md
@@ -12,6 +12,7 @@ Settings:
* RESET is available as `Fn`+ ` ESC`
* Underglow toggle is available as `Fn` + `Q`. Yes your keyboard has lights even if you didn't get the LEDs. Bonus!
* vim-style arrow key bindings H J K L in layer 1
+* The `Bkspc` and `\` keys have been swapped, the reach was too great to have backspace on the top row
### Initial Installation
@@ -35,16 +36,16 @@ A hex file `dz60_billiams.hex` will be created in the base qmk_firmware director
5. Holding those keys down, plug the keyboard into your computer, which will put the keyboard in bootlegger mode
6. If you are using [QMK toolbox](https://github.com/qmk/qmk_toolbox/releases), upload the .hex file you made above, select it and hit the flash button. For the love of all that is good and holy on Earth, don't hit the load button, that will load the default keymap and that's not what you want! Unless it is, in which case click away.
-Note: If you didn't follow my instructions in 4 and accidentally loaded the default keymap, then to `RESET` the keyboard and kick it into bootleg mode again, hold the `down arrow` key and `\`. The default layout is Build 1 and sets the `MENU` key on that build to `Fn`. `MENU` corresponds to `down arrow` in build 4. Note that you don't have to unplug the keyboard.
+Note: If you didn't follow my instructions in 4 and accidentally loaded the default keymap, then to `RESET` the keyboard and kick it into bootleg mode again, hold the `down arrow` key and `\`. The default layout is Build 1 and sets the `MENU` key on that build to `Fn`. `MENU` corresponds to `down arrow` in build 4. Note that you don't have to unplug the keyboard.
Hope this helps!
### 0 Qwerty
```
,-----------------------------------------------------------------------------------------.
-| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ |
|-----------------------------------------------------------------------------------------+
-| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bkspc |
|-----------------------------------------------------------------------------------------+
| Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
|-----------------------------------------------------------------------------------------+
@@ -69,4 +70,3 @@ FN Layer
| | | | | | | HOME | PG_DN | END |
`-----------------------------------------------------------------------------------------'
```
-
diff --git a/keyboards/dz60/keymaps/mpaarating/keymap.c b/keyboards/dz60/keymaps/mpaarating/keymap.c
new file mode 100644
index 000000000..3ad32aae0
--- /dev/null
+++ b/keyboards/dz60/keymaps/mpaarating/keymap.c
@@ -0,0 +1,24 @@
+#include QMK_KEYBOARD_H
+
+// Layer definition
+#define L0 0
+#define L1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [L0] = LAYOUT_60_2_function(
+ 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_BSLASH, KC_GRAVE,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPACE,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(L1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_RGUI, MO(L1)
+ ),
+
+ [L1] = LAYOUT_60_2_function(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_UP, KC_TRNS, KC_DELETE,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_LEFT, KC_RIGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_END, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/dz60/keymaps/mpaarating/readme.md b/keyboards/dz60/keymaps/mpaarating/readme.md
new file mode 100644
index 000000000..d21d26c75
--- /dev/null
+++ b/keyboards/dz60/keymaps/mpaarating/readme.md
@@ -0,0 +1,12 @@
+# DZ60
+
+![dz60](https://i.imgur.com/nVOX9Gb.jpg)
+
+### Layout
+**Note:** Layer 2 does not exist currently
+![layer 0](https://i.imgur.com/uXFTNBs.png)
+![layer 1](https://i.imgur.com/f7uTkDU.png)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dz60:mpaarating
diff --git a/keyboards/dz60/keymaps/weeheavy_2.25_lshift/README.md b/keyboards/dz60/keymaps/weeheavy_2.25_lshift/README.md
new file mode 100644
index 000000000..6ff8d9e67
--- /dev/null
+++ b/keyboards/dz60/keymaps/weeheavy_2.25_lshift/README.md
@@ -0,0 +1,53 @@
+![DZ60 ANSI with arrow cluster](https://i.imgur.com/hX6rMcm.png)
+
+# weeheavy's DZ60 layout
+
+* Default 2.25 left shift
+* arrow cluster
+
+## Layouts
+
+The base layout is ANSI QWERTY.
+
+Key sizes (ASCII keyboards below match this scale):
+
+ 1u = 4 chars = | |
+ 1.25u = 5 chars = | |
+ 1.5u = 6 chars = | |
+ 1.75u = 7 chars = | |
+ 2u = 8 chars = | |
+ 2.25u = 9 chars = | |
+ 2.75u = 11 chars = | |
+ 6.25u = 25 chars = | |
+
+### Layer 0: Base layout
+
+Specialities:
+
+* Arrow cluster
+* FN: access to layer 1
+
+```
+,----------------------------------------------------------.
+|Es||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 |
+|----------------------------------------------------------+
+| Shift ||Z ||X ||C ||V ||B ||N ||M ||, ||. ||/ || Shift |
+|----------------------------------------------------------+
+|Ctl||Win||Alt|| Space |FN||← ||↑ ||↓ ||→ |
+`----------------------------------------------------------'
+```
+
+### Layer 1: Utility
+
+Specialities:
+
+* F1-F12 keys when holding FN
+* Multimedia cluster on the bottom right
+* RGB config on the left hand side
+* Reset key on ESC and backslash location
+* Brightness control top right
+* Additional "B" key (a learning from my mistakes)
diff --git a/keyboards/dz60/keymaps/weeheavy_2.25_lshift/keymap.c b/keyboards/dz60/keymaps/weeheavy_2.25_lshift/keymap.c
new file mode 100644
index 000000000..38e4519b3
--- /dev/null
+++ b/keyboards/dz60/keymaps/weeheavy_2.25_lshift/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+// Make special keycodes more visible
+#define ____ KC_TRNS
+#define XXXX KC_NO
+
+// Layer definition
+#define L0 0
+#define L1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Base layer - ANSI QWERTY
+[L0] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXX, 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, XXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(L1), KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT),
+
+// Utility layer - RGB and multimedia control, reset and additional "b" button
+[L1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ____, ____,
+ KC_B, RGB_TOG, RGB_MOD, RGB_M_K, RGB_M_R, ____, ____, KC_PSCR, ____, KC_PAUS, KC_BRID, KC_BRIU, ____, RESET,
+ ____, RGB_HUI, RGB_HUD, KC_DEL, ____, ____, ____, KC_INS, KC_HOME, KC_PGUP, ____, ____, ____,
+ ____, ____, RGB_SAI, RGB_SAD, ____, ____, ____, ____, ____, KC_END, KC_PGDN, KC_MPLY, ____, KC_MUTE, KC_MUTE,
+ ____, RGB_VAI, RGB_VAD, ____, ____, ____, ____, KC_MPRV, KC_VOLU, KC_VOLD, KC_MNXT),
+
+};
+
diff --git a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/keymap.c b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/keymap.c
index 600ac8619..a12358c8d 100644
--- a/keyboards/dztech/dz60rgb/keymaps/matthewrobo/keymap.c
+++ b/keyboards/dztech/dz60rgb/keymaps/matthewrobo/keymap.c
@@ -146,7 +146,7 @@ void rgb_matrix_indicators_user(void)
break;
case _RGB: {
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
+ HSV hsv = { rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v };
HSV hui = hsv;
HSV hud = hsv;
HSV sai = hsv;
diff --git a/keyboards/eco/rules.mk b/keyboards/eco/rules.mk
index 35ee906b1..e2cebaf97 100644
--- a/keyboards/eco/rules.mk
+++ b/keyboards/eco/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -64,4 +63,4 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-DEFAULT_FOLDER = eco/rev2 \ No newline at end of file
+DEFAULT_FOLDER = eco/rev2
diff --git a/keyboards/ep/96/rules.mk b/keyboards/ep/96/rules.mk
index 407135de2..9ddf9717e 100644
--- a/keyboards/ep/96/rules.mk
+++ b/keyboards/ep/96/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ergo42/rules.mk b/keyboards/ergo42/rules.mk
index cdc9da908..286c5fccb 100644
--- a/keyboards/ergo42/rules.mk
+++ b/keyboards/ergo42/rules.mk
@@ -5,7 +5,6 @@ SRC += matrix.c \
ssd1306.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ergodash/rev1/info.json b/keyboards/ergodash/rev1/info.json
index bcfbda6d3..de8b0c070 100644
--- a/keyboards/ergodash/rev1/info.json
+++ b/keyboards/ergodash/rev1/info.json
@@ -1,13 +1,366 @@
{
- "keyboard_name": "ErgoDash rev2",
- "url": "",
- "maintainer": "qmk",
- "width": 18,
- "height": 6.25,
- "layouts": {
- "LAYOUT": {
- "key_count": 70,
- "layout": [{"label":"L00", "x":0, "y":0.375}, {"label":"L01", "x":1, "y":0.375}, {"label":"L02", "x":2, "y":0.125}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0.125}, {"label":"L05", "x":5, "y":0.25}, {"label":"L06", "x":6, "y":0.75}, {"label":"R00", "x":11, "y":0.75}, {"label":"R01", "x":12, "y":0.25}, {"label":"R02", "x":13, "y":0.125}, {"label":"R03", "x":14, "y":0}, {"label":"R04", "x":15, "y":0.125}, {"label":"R05", "x":16, "y":0.375}, {"label":"R06", "x":17, "y":0.375}, {"label":"L10", "x":0, "y":1.375}, {"label":"L11", "x":1, "y":1.375}, {"label":"L12", "x":2, "y":1.125}, {"label":"L13", "x":3, "y":1}, {"label":"L14", "x":4, "y":1.125}, {"label":"L15", "x":5, "y":1.25}, {"label":"L16", "x":6, "y":1.75}, {"label":"R10", "x":11, "y":1.75}, {"label":"R11", "x":12, "y":1.25}, {"label":"R12", "x":13, "y":1.125}, {"label":"R13", "x":14, "y":1}, {"label":"R14", "x":15, "y":1.125}, {"label":"R15", "x":16, "y":1.375}, {"label":"R16", "x":17, "y":1.375}, {"label":"L20", "x":0, "y":2.375}, {"label":"L21", "x":1, "y":2.375}, {"label":"L22", "x":2, "y":2.125}, {"label":"L23", "x":3, "y":2}, {"label":"L24", "x":4, "y":2.125}, {"label":"L25", "x":5, "y":2.25}, {"label":"L26", "x":6, "y":2.75}, {"label":"R20", "x":11, "y":2.75}, {"label":"R21", "x":12, "y":2.25}, {"label":"R22", "x":13, "y":2.125}, {"label":"R23", "x":14, "y":2}, {"label":"R24", "x":15, "y":2.125}, {"label":"R25", "x":16, "y":2.375}, {"label":"R26", "x":17, "y":2.375}, {"label":"L30", "x":0, "y":3.375}, {"label":"L31", "x":1, "y":3.375}, {"label":"L32", "x":2, "y":3.125}, {"label":"L33", "x":3, "y":3}, {"label":"L34", "x":4, "y":3.125}, {"label":"L35", "x":5, "y":3.25}, {"label":"L36", "x":6.5, "y":4.25}, {"label":"R30", "x":10.5, "y":4.25}, {"label":"R31", "x":12, "y":3.25}, {"label":"R32", "x":13, "y":3.125}, {"label":"R33", "x":14, "y":3}, {"label":"R34", "x":15, "y":3.125}, {"label":"R35", "x":16, "y":3.375}, {"label":"R36", "x":17, "y":3.375}, {"label":"L40", "x":0, "y":4.375}, {"label":"L41", "x":1, "y":4.375}, {"label":"L42", "x":2, "y":4.125}, {"label":"L43", "x":3, "y":4}, {"label":"L44", "x":5.5, "y":5.25}, {"label":"L45", "x":6.5, "y":5.25}, {"label":"L46", "x":7.5, "y":4.25, "h":2}, {"label":"R40", "x":9.5, "y":4.25, "h":2}, {"label":"R41", "x":10.5, "y":5.25}, {"label":"R42", "x":11.5, "y":5.25}, {"label":"R43", "x":14, "y":4}, {"label":"R44", "x":15, "y":4.125}, {"label":"R45", "x":16, "y":4.375}, {"label":"R46", "x":17, "y":4.375}]
+ "keyboard_name": "ErgoDash rev1.2",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19,
+ "height": 8.375,
+ "layouts": {
+ "LAYOUT_4key": {
+ "layout": [
+ {"y": 0.375, "x": 0.5, "label": "L00"},
+ {"y": 0.375, "x": 1.5, "label": "L01"},
+ {"y": 0.125, "x": 2.5, "label": "L02"},
+ {"y": 0, "x": 3.5, "label": "L03"},
+ {"y": 0.125, "x": 4.5, "label": "L04"},
+ {"y": 0.25, "x": 5.5, "label": "L05"},
+ {"y": 0.75, "x": 6.5, "label": "L06"},
+ {"y": 0.75, "x": 12, "label": "R00"},
+ {"y": 0.25, "x": 13, "label": "R01"},
+ {"y": 0.125, "x": 14, "label": "R02"},
+ {"y": 0, "x": 15, "label": "R03"},
+ {"y": 0.125, "x": 16, "label": "R04"},
+ {"y": 0.375, "x": 17, "label": "R05"},
+ {"y": 0.375, "x": 18, "label": "R06"},
+ {"y": 1.375, "x": 0.5, "label": "L10"},
+ {"y": 1.375, "x": 1.5, "label": "L11"},
+ {"y": 1.125, "x": 2.5, "label": "L12"},
+ {"y": 1, "x": 3.5, "label": "L13"},
+ {"y": 1.125, "x": 4.5, "label": "L14"},
+ {"y": 1.25, "x": 5.5, "label": "L15"},
+ {"y": 1.75, "x": 6.5, "label": "L16"},
+ {"y": 1.75, "x": 12, "label": "R10"},
+ {"y": 1.25, "x": 13, "label": "R11"},
+ {"y": 1.125, "x": 14, "label": "R12"},
+ {"y": 1, "x": 15, "label": "R13"},
+ {"y": 1.125, "x": 16, "label": "R14"},
+ {"y": 1.375, "x": 17, "label": "R15"},
+ {"y": 1.375, "x": 18, "label": "R16"},
+ {"y": 2.375, "x": 0.5, "label": "L20"},
+ {"y": 2.375, "x": 1.5, "label": "L21"},
+ {"y": 2.125, "x": 2.5, "label": "L22"},
+ {"y": 2, "x": 3.5, "label": "L23"},
+ {"y": 2.125, "x": 4.5, "label": "L24"},
+ {"y": 2.25, "x": 5.5, "label": "L25"},
+ {"y": 2.75, "x": 6.5, "label": "L26"},
+ {"y": 2.75, "x": 12, "label": "R20"},
+ {"y": 2.25, "x": 13, "label": "R21"},
+ {"y": 2.125, "x": 14, "label": "R22"},
+ {"y": 2, "x": 15, "label": "R23"},
+ {"y": 2.125, "x": 16, "label": "R24"},
+ {"y": 2.375, "x": 17, "label": "R25"},
+ {"y": 2.375, "x": 18, "label": "R26"},
+ {"y": 3.375, "x": 0.5, "label": "L30"},
+ {"y": 3.375, "x": 1.5, "label": "L31"},
+ {"y": 3.125, "x": 2.5, "label": "L32"},
+ {"y": 3, "x": 3.5, "label": "L33"},
+ {"y": 3.125, "x": 4.5, "label": "L34"},
+ {"y": 3.25, "x": 5.5, "label": "L35"},
+ {"y": 4, "x": 6.5, "label": "L36"},
+ {"y": 4, "x": 12, "label": "R30"},
+ {"y": 3.25, "x": 13, "label": "R31"},
+ {"y": 3.125, "x": 14, "label": "R32"},
+ {"y": 3, "x": 15, "label": "R33"},
+ {"y": 3.125, "x": 16, "label": "R34"},
+ {"y": 3.375, "x": 17, "label": "R35"},
+ {"y": 3.375, "x": 18, "label": "R36"},
+ {"y": 4.375, "x": 0.5, "label": "L40"},
+ {"y": 4.375, "x": 1.5, "label": "L41"},
+ {"y": 4.125, "x": 2.5, "label": "L42"},
+ {"y": 4, "x": 3.5, "label": "L43"},
+ {"y": 5, "x": 5.5, "label": "L44"},
+ {"y": 5, "x": 6.5, "label": "L45"},
+ {"h": 2, "y": 4, "x": 7.5, "label": "L46"},
+ {"h": 2, "y": 4, "x": 11, "label": "R40"},
+ {"y": 5, "x": 12, "label": "R41"},
+ {"y": 5, "x": 13, "label": "R42"},
+ {"y": 4, "x": 15, "label": "R43"},
+ {"y": 4.125, "x": 16, "label": "R44"},
+ {"y": 4.375, "x": 17, "label": "R45"},
+ {"y": 4.375, "x": 18, "label": "R46"}]
+ },
+ "LAYOUT_4key_2u_inner": {
+ "layout": [
+ {"y": 0.375, "x": 0.5, "label": "L00"},
+ {"y": 0.375, "x": 1.5, "label": "L01"},
+ {"y": 0.125, "x": 2.5, "label": "L02"},
+ {"y": 0, "x": 3.5, "label": "L03"},
+ {"y": 0.125, "x": 4.5, "label": "L04"},
+ {"y": 0.25, "x": 5.5, "label": "L05"},
+ {"y": 0.75, "x": 6.5, "label": "L06"},
+ {"y": 0.75, "x": 12, "label": "R00"},
+ {"y": 0.25, "x": 13, "label": "R01"},
+ {"y": 0.125, "x": 14, "label": "R02"},
+ {"y": 0, "x": 15, "label": "R03"},
+ {"y": 0.125, "x": 16, "label": "R04"},
+ {"y": 0.375, "x": 17, "label": "R05"},
+ {"y": 0.375, "x": 18, "label": "R06"},
+ {"y": 1.375, "x": 0.5, "label": "L10"},
+ {"y": 1.375, "x": 1.5, "label": "L11"},
+ {"y": 1.125, "x": 2.5, "label": "L12"},
+ {"y": 1, "x": 3.5, "label": "L13"},
+ {"y": 1.125, "x": 4.5, "label": "L14"},
+ {"y": 1.25, "x": 5.5, "label": "L15"},
+ {"y": 1.75, "x": 6.5, "label": "L16"},
+ {"y": 1.75, "x": 12, "label": "R10"},
+ {"y": 1.25, "x": 13, "label": "R11"},
+ {"y": 1.125, "x": 14, "label": "R12"},
+ {"y": 1, "x": 15, "label": "R13"},
+ {"y": 1.125, "x": 16, "label": "R14"},
+ {"y": 1.375, "x": 17, "label": "R15"},
+ {"y": 1.375, "x": 18, "label": "R16"},
+ {"y": 2.375, "x": 0.5, "label": "L20"},
+ {"y": 2.375, "x": 1.5, "label": "L21"},
+ {"y": 2.125, "x": 2.5, "label": "L22"},
+ {"y": 2, "x": 3.5, "label": "L23"},
+ {"y": 2.125, "x": 4.5, "label": "L24"},
+ {"y": 2.25, "x": 5.5, "label": "L25"},
+ {"y": 2.75, "x": 6.5, "label": "L26"},
+ {"y": 2.75, "x": 12, "label": "R20"},
+ {"y": 2.25, "x": 13, "label": "R21"},
+ {"y": 2.125, "x": 14, "label": "R22"},
+ {"y": 2, "x": 15, "label": "R23"},
+ {"y": 2.125, "x": 16, "label": "R24"},
+ {"y": 2.375, "x": 17, "label": "R25"},
+ {"y": 2.375, "x": 18, "label": "R26"},
+ {"y": 3.375, "x": 0.5, "label": "L30"},
+ {"y": 3.375, "x": 1.5, "label": "L31"},
+ {"y": 3.125, "x": 2.5, "label": "L32"},
+ {"y": 3, "x": 3.5, "label": "L33"},
+ {"y": 3.125, "x": 4.5, "label": "L34"},
+ {"y": 3.25, "x": 5.5, "label": "L35"},
+ {"y": 4, "x": 7.5, "label": "L36"},
+ {"y": 4, "x": 11, "label": "R30"},
+ {"y": 3.25, "x": 13, "label": "R31"},
+ {"y": 3.125, "x": 14, "label": "R32"},
+ {"y": 3, "x": 15, "label": "R33"},
+ {"y": 3.125, "x": 16, "label": "R34"},
+ {"y": 3.375, "x": 17, "label": "R35"},
+ {"y": 3.375, "x": 18, "label": "R36"},
+ {"y": 4.375, "x": 0.5, "label": "L40"},
+ {"y": 4.375, "x": 1.5, "label": "L41"},
+ {"y": 4.125, "x": 2.5, "label": "L42"},
+ {"y": 4, "x": 3.5, "label": "L43"},
+ {"y": 5, "x": 5.5, "label": "L44"},
+ {"h": 2, "y": 4, "x": 6.5, "label": "L45"},
+ {"y": 5, "x": 7.5, "label": "L46"},
+ {"y": 5, "x": 11, "label": "R40"},
+ {"h": 2, "y": 4, "x": 12, "label": "R41"},
+ {"y": 5, "x": 13, "label": "R42"},
+ {"y": 4, "x": 15, "label": "R43"},
+ {"y": 4.125, "x": 16, "label": "R44"},
+ {"y": 4.375, "x": 17, "label": "R45"},
+ {"y": 4.375, "x": 18, "label": "R46"}]
+ },
+ "LAYOUT_3key_2us": {
+ "layout": [
+ {"y": 0.375, "x": 0.5, "label": "L00"},
+ {"y": 0.375, "x": 1.5, "label": "L01"},
+ {"y": 0.125, "x": 2.5, "label": "L02"},
+ {"y": 0, "x": 3.5, "label": "L03"},
+ {"y": 0.125, "x": 4.5, "label": "L04"},
+ {"y": 0.25, "x": 5.5, "label": "L05"},
+ {"y": 0.75, "x": 6.5, "label": "L06"},
+ {"y": 0.75, "x": 12, "label": "R00"},
+ {"y": 0.25, "x": 13, "label": "R01"},
+ {"y": 0.125, "x": 14, "label": "R02"},
+ {"y": 0, "x": 15, "label": "R03"},
+ {"y": 0.125, "x": 16, "label": "R04"},
+ {"y": 0.375, "x": 17, "label": "R05"},
+ {"y": 0.375, "x": 18, "label": "R06"},
+ {"y": 1.375, "x": 0.5, "label": "L10"},
+ {"y": 1.375, "x": 1.5, "label": "L11"},
+ {"y": 1.125, "x": 2.5, "label": "L12"},
+ {"y": 1, "x": 3.5, "label": "L13"},
+ {"y": 1.125, "x": 4.5, "label": "L14"},
+ {"y": 1.25, "x": 5.5, "label": "L15"},
+ {"y": 1.75, "x": 6.5, "label": "L16"},
+ {"y": 1.75, "x": 12, "label": "R10"},
+ {"y": 1.25, "x": 13, "label": "R11"},
+ {"y": 1.125, "x": 14, "label": "R12"},
+ {"y": 1, "x": 15, "label": "R13"},
+ {"y": 1.125, "x": 16, "label": "R14"},
+ {"y": 1.375, "x": 17, "label": "R15"},
+ {"y": 1.375, "x": 18, "label": "R16"},
+ {"y": 2.375, "x": 0.5, "label": "L20"},
+ {"y": 2.375, "x": 1.5, "label": "L21"},
+ {"y": 2.125, "x": 2.5, "label": "L22"},
+ {"y": 2, "x": 3.5, "label": "L23"},
+ {"y": 2.125, "x": 4.5, "label": "L24"},
+ {"y": 2.25, "x": 5.5, "label": "L25"},
+ {"y": 2.75, "x": 6.5, "label": "L26"},
+ {"y": 2.75, "x": 12, "label": "R20"},
+ {"y": 2.25, "x": 13, "label": "R21"},
+ {"y": 2.125, "x": 14, "label": "R22"},
+ {"y": 2, "x": 15, "label": "R23"},
+ {"y": 2.125, "x": 16, "label": "R24"},
+ {"y": 2.375, "x": 17, "label": "R25"},
+ {"y": 2.375, "x": 18, "label": "R26"},
+ {"y": 3.375, "x": 0.5, "label": "L30"},
+ {"y": 3.375, "x": 1.5, "label": "L31"},
+ {"y": 3.125, "x": 2.5, "label": "L32"},
+ {"y": 3, "x": 3.5, "label": "L33"},
+ {"y": 3.125, "x": 4.5, "label": "L34"},
+ {"y": 3.25, "x": 5.5, "label": "L35"},
+ {"y": 3.25, "x": 13, "label": "R31"},
+ {"y": 3.125, "x": 14, "label": "R32"},
+ {"y": 3, "x": 15, "label": "R33"},
+ {"y": 3.125, "x": 16, "label": "R34"},
+ {"y": 3.375, "x": 17, "label": "R35"},
+ {"y": 3.375, "x": 18, "label": "R36"},
+ {"y": 4.375, "x": 0.5, "label": "L40"},
+ {"y": 4.375, "x": 1.5, "label": "L41"},
+ {"y": 4.125, "x": 2.5, "label": "L42"},
+ {"y": 4, "x": 3.5, "label": "L43"},
+ {"y": 5, "x": 5.5, "label": "L44"},
+ {"h": 2, "y": 4, "x": 6.5, "label": "L45"},
+ {"h": 2, "y": 4, "x": 7.5, "label": "L46"},
+ {"h": 2, "y": 4, "x": 11, "label": "R40"},
+ {"h": 2, "y": 4, "x": 12, "label": "R41"},
+ {"y": 5, "x": 13, "label": "R42"},
+ {"y": 4, "x": 15, "label": "R43"},
+ {"y": 4.125, "x": 16, "label": "R44"},
+ {"y": 4.375, "x": 17, "label": "R45"},
+ {"y": 4.375, "x": 18, "label": "R46"}]
+ },
+ "LAYOUT_3key_1us": {
+ "layout": [
+ {"y": 0.375, "x": 0.5, "label": "L00"},
+ {"y": 0.375, "x": 1.5, "label": "L01"},
+ {"y": 0.125, "x": 2.5, "label": "L02"},
+ {"y": 0, "x": 3.5, "label": "L03"},
+ {"y": 0.125, "x": 4.5, "label": "L04"},
+ {"y": 0.25, "x": 5.5, "label": "L05"},
+ {"y": 0.75, "x": 6.5, "label": "L06"},
+ {"y": 0.75, "x": 12, "label": "R00"},
+ {"y": 0.25, "x": 13, "label": "R01"},
+ {"y": 0.125, "x": 14, "label": "R02"},
+ {"y": 0, "x": 15, "label": "R03"},
+ {"y": 0.125, "x": 16, "label": "R04"},
+ {"y": 0.375, "x": 17, "label": "R05"},
+ {"y": 0.375, "x": 18, "label": "R06"},
+ {"y": 1.375, "x": 0.5, "label": "L10"},
+ {"y": 1.375, "x": 1.5, "label": "L11"},
+ {"y": 1.125, "x": 2.5, "label": "L12"},
+ {"y": 1, "x": 3.5, "label": "L13"},
+ {"y": 1.125, "x": 4.5, "label": "L14"},
+ {"y": 1.25, "x": 5.5, "label": "L15"},
+ {"y": 1.75, "x": 6.5, "label": "L16"},
+ {"y": 1.75, "x": 12, "label": "R10"},
+ {"y": 1.25, "x": 13, "label": "R11"},
+ {"y": 1.125, "x": 14, "label": "R12"},
+ {"y": 1, "x": 15, "label": "R13"},
+ {"y": 1.125, "x": 16, "label": "R14"},
+ {"y": 1.375, "x": 17, "label": "R15"},
+ {"y": 1.375, "x": 18, "label": "R16"},
+ {"y": 2.375, "x": 0.5, "label": "L20"},
+ {"y": 2.375, "x": 1.5, "label": "L21"},
+ {"y": 2.125, "x": 2.5, "label": "L22"},
+ {"y": 2, "x": 3.5, "label": "L23"},
+ {"y": 2.125, "x": 4.5, "label": "L24"},
+ {"y": 2.25, "x": 5.5, "label": "L25"},
+ {"y": 2.75, "x": 6.5, "label": "L26"},
+ {"y": 2.75, "x": 12, "label": "R20"},
+ {"y": 2.25, "x": 13, "label": "R21"},
+ {"y": 2.125, "x": 14, "label": "R22"},
+ {"y": 2, "x": 15, "label": "R23"},
+ {"y": 2.125, "x": 16, "label": "R24"},
+ {"y": 2.375, "x": 17, "label": "R25"},
+ {"y": 2.375, "x": 18, "label": "R26"},
+ {"y": 3.375, "x": 0.5, "label": "L30"},
+ {"y": 3.375, "x": 1.5, "label": "L31"},
+ {"y": 3.125, "x": 2.5, "label": "L32"},
+ {"y": 3, "x": 3.5, "label": "L33"},
+ {"y": 3.125, "x": 4.5, "label": "L34"},
+ {"y": 3.25, "x": 5.5, "label": "L35"},
+ {"y": 4, "x": 6.5, "label": "L36"},
+ {"y": 4, "x": 12, "label": "R30"},
+ {"y": 3.25, "x": 13, "label": "R31"},
+ {"y": 3.125, "x": 14, "label": "R32"},
+ {"y": 3, "x": 15, "label": "R33"},
+ {"y": 3.125, "x": 16, "label": "R34"},
+ {"y": 3.375, "x": 17, "label": "R35"},
+ {"y": 3.375, "x": 18, "label": "R36"},
+ {"y": 4.375, "x": 0.5, "label": "L40"},
+ {"y": 4.375, "x": 1.5, "label": "L41"},
+ {"y": 4.125, "x": 2.5, "label": "L42"},
+ {"y": 4, "x": 3.5, "label": "L43"},
+ {"y": 5, "x": 5.5, "label": "L44"},
+ {"y": 5, "x": 6.5, "label": "L45"},
+ {"y": 5, "x": 12, "label": "R41"},
+ {"y": 5, "x": 13, "label": "R42"},
+ {"y": 4, "x": 15, "label": "R43"},
+ {"y": 4.125, "x": 16, "label": "R44"},
+ {"y": 4.375, "x": 17, "label": "R45"},
+ {"y": 4.375, "x": 18, "label": "R46"}]
+ },
+ "LAYOUT_2key": {
+ "layout": [
+ {"y": 0.375, "x": 0.5, "label": "L00"},
+ {"y": 0.375, "x": 1.5, "label": "L01"},
+ {"y": 0.125, "x": 2.5, "label": "L02"},
+ {"y": 0, "x": 3.5, "label": "L03"},
+ {"y": 0.125, "x": 4.5, "label": "L04"},
+ {"y": 0.25, "x": 5.5, "label": "L05"},
+ {"y": 0.75, "x": 6.5, "label": "L06"},
+ {"y": 0.75, "x": 12, "label": "R00"},
+ {"y": 0.25, "x": 13, "label": "R01"},
+ {"y": 0.125, "x": 14, "label": "R02"},
+ {"y": 0, "x": 15, "label": "R03"},
+ {"y": 0.125, "x": 16, "label": "R04"},
+ {"y": 0.375, "x": 17, "label": "R05"},
+ {"y": 0.375, "x": 18, "label": "R06"},
+ {"y": 1.375, "x": 0.5, "label": "L10"},
+ {"y": 1.375, "x": 1.5, "label": "L11"},
+ {"y": 1.125, "x": 2.5, "label": "L12"},
+ {"y": 1, "x": 3.5, "label": "L13"},
+ {"y": 1.125, "x": 4.5, "label": "L14"},
+ {"y": 1.25, "x": 5.5, "label": "L15"},
+ {"y": 1.75, "x": 6.5, "label": "L16"},
+ {"y": 1.75, "x": 12, "label": "R10"},
+ {"y": 1.25, "x": 13, "label": "R11"},
+ {"y": 1.125, "x": 14, "label": "R12"},
+ {"y": 1, "x": 15, "label": "R13"},
+ {"y": 1.125, "x": 16, "label": "R14"},
+ {"y": 1.375, "x": 17, "label": "R15"},
+ {"y": 1.375, "x": 18, "label": "R16"},
+ {"y": 2.375, "x": 0.5, "label": "L20"},
+ {"y": 2.375, "x": 1.5, "label": "L21"},
+ {"y": 2.125, "x": 2.5, "label": "L22"},
+ {"y": 2, "x": 3.5, "label": "L23"},
+ {"y": 2.125, "x": 4.5, "label": "L24"},
+ {"y": 2.25, "x": 5.5, "label": "L25"},
+ {"y": 2.75, "x": 6.5, "label": "L26"},
+ {"y": 2.75, "x": 12, "label": "R20"},
+ {"y": 2.25, "x": 13, "label": "R21"},
+ {"y": 2.125, "x": 14, "label": "R22"},
+ {"y": 2, "x": 15, "label": "R23"},
+ {"y": 2.125, "x": 16, "label": "R24"},
+ {"y": 2.375, "x": 17, "label": "R25"},
+ {"y": 2.375, "x": 18, "label": "R26"},
+ {"y": 3.375, "x": 0.5, "label": "L30"},
+ {"y": 3.375, "x": 1.5, "label": "L31"},
+ {"y": 3.125, "x": 2.5, "label": "L32"},
+ {"y": 3, "x": 3.5, "label": "L33"},
+ {"y": 3.125, "x": 4.5, "label": "L34"},
+ {"y": 3.25, "x": 5.5, "label": "L35"},
+ {"y": 3.25, "x": 13, "label": "R31"},
+ {"y": 3.125, "x": 14, "label": "R32"},
+ {"y": 3, "x": 15, "label": "R33"},
+ {"y": 3.125, "x": 16, "label": "R34"},
+ {"y": 3.375, "x": 17, "label": "R35"},
+ {"y": 3.375, "x": 18, "label": "R36"},
+ {"y": 4.375, "x": 0.5, "label": "L40"},
+ {"y": 4.375, "x": 1.5, "label": "L41"},
+ {"y": 4.125, "x": 2.5, "label": "L42"},
+ {"y": 4, "x": 3.5, "label": "L43"},
+ {"y": 5, "x": 5.5, "label": "L44"},
+ {"h": 2, "y": 4, "x": 6.5, "label": "L45"},
+ {"h": 2, "y": 4, "x": 12, "label": "R41"},
+ {"y": 5, "x": 13, "label": "R42"},
+ {"y": 4, "x": 15, "label": "R43"},
+ {"y": 4.125, "x": 16, "label": "R44"},
+ {"y": 4.375, "x": 17, "label": "R45"},
+ {"y": 4.375, "x": 18, "label": "R46"}]
+ }
}
- }
}
diff --git a/keyboards/ergodash/rev1/rev1.h b/keyboards/ergodash/rev1/rev1.h
index 55135adca..f494a3558 100644
--- a/keyboards/ergodash/rev1/rev1.h
+++ b/keyboards/ergodash/rev1/rev1.h
@@ -10,8 +10,8 @@
#ifdef USE_I2C
#include <stddef.h>
#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/interrupt.h>
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
#endif
#endif
@@ -20,47 +20,132 @@
#ifndef FLIP_HALF
// Standard Keymap
// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
-#define LAYOUT( \
- L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
- L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
- L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
- L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
- L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05, L06 }, \
- { L10, L11, L12, L13, L14, L15, L16 }, \
- { L20, L21, L22, L23, L24, L25, L26 }, \
- { L30, L31, L32, L33, L34, L35, L36 }, \
- { L40, L41, L42, L43, L44, L45, L46 }, \
- { R06, R05, R04, R03, R02, R01, R00 }, \
- { R16, R15, R14, R13, R12, R11, R10 }, \
- { R26, R25, R24, R23, R22, R21, R20 }, \
- { R36, R35, R34, R33, R32, R31, R30 }, \
- { R46, R45, R44, R43, R42, R41, R40 } \
- }
+#define LAYOUT_4key( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { L40, L41, L42, L43, L44, L45, L46 }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { R36, R35, R34, R33, R32, R31, R30 }, \
+ { R46, R45, R44, R43, R42, R41, R40 } \
+ }
+
+// Just defined for configurator support, the matrix is identical to LAYOUT_4key
+#define LAYOUT_4key_2u_inner( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { L40, L41, L42, L43, L44, L45, L46 }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { R36, R35, R34, R33, R32, R31, R30 }, \
+ { R46, R45, R44, R43, R42, R41, R40 } \
+ }
+
+#define LAYOUT_3key_2us( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, KC_NO }, \
+ { L40, L41, L42, L43, L44, L45, L46 }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { R36, R35, R34, R33, R32, R31, KC_NO }, \
+ { R46, R45, R44, R43, R42, R41, R40 } \
+ }
+
+
+#define LAYOUT_3key_1us( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, R41, R42, R43, R44, R45, R46 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { L40, L41, L42, L43, L44, L45, KC_NO }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { R36, R35, R34, R33, R32, R31, R30 }, \
+ { R46, R45, R44, R43, R42, R41, KC_NO } \
+ }
+
+#define LAYOUT_2key( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, R41, R42, R43, R44, R45, R46 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, KC_NO }, \
+ { L40, L41, L42, L43, L44, L45, KC_NO }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20 }, \
+ { R36, R35, R34, R33, R32, R31, KC_NO }, \
+ { R46, R45, R44, R43, R42, R41, KC_NO } \
+ }
+
+#define LAYOUT LAYOUT_4key
+
#else
// Keymap with right side flipped
// (TRRS jack on both halves are to the right)
#define LAYOUT( \
- L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
- L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
- L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
- L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
- L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05, L06 }, \
- { L10, L11, L12, L13, L14, L15, L16 }, \
- { L20, L21, L22, L23, L24, L25, L26 }, \
- { L30, L31, L32, L33, L34, L35, L36 }, \
- { L40, L41, L42, L43, L44, L45, L46 }, \
- { R00, R01, R02, R03, R04, R05, R06 }, \
- { R10, R11, R12, R13, R14, R15, R16 }, \
- { R20, R21, R22, R23, R24, R25, R26 }, \
- { R30, R31, R32, R33, R34, R35, R36 }, \
- { R40, R41, R42, R43, R44, R45, R46 } \
- }
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+ L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, L16 }, \
+ { L20, L21, L22, L23, L24, L25, L26 }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { L40, L41, L42, L43, L44, L45, L46 }, \
+ { R00, R01, R02, R03, R04, R05, R06 }, \
+ { R10, R11, R12, R13, R14, R15, R16 }, \
+ { R20, R21, R22, R23, R24, R25, R26 }, \
+ { R30, R31, R32, R33, R34, R35, R36 }, \
+ { R40, R41, R42, R43, R44, R45, R46 } \
+ }
#endif
#endif
diff --git a/keyboards/ergodone/keymaps/default/keymap.c b/keyboards/ergodone/keymaps/default/keymap.c
index 7f13f3d67..28b393a3d 100644
--- a/keyboards/ergodone/keymaps/default/keymap.c
+++ b/keyboards/ergodone/keymaps/default/keymap.c
@@ -141,24 +141,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- break;
- case 1:
- if (record->event.pressed) { // For resetting EEPROM
- eeconfig_init();
- }
- break;
- }
- return MACRO_NONE;
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// dynamically generate these.
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c b/keyboards/ergodox_ez/keymaps/default_osx/keymap.c
index 864c62a47..6388586de 100644
--- a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/default_osx/keymap.c
@@ -138,21 +138,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/ergodox_ez/keymaps/testing/keymap.c b/keyboards/ergodox_ez/keymaps/testing/keymap.c
index 2fdd12236..a90458cef 100644
--- a/keyboards/ergodox_ez/keymaps/testing/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/testing/keymap.c
@@ -28,19 +28,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// leaving this in place for compatibilty with old keymaps cloned and re-compiled.
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- break;
- }
- return MACRO_NONE;
-};
-
void matrix_init_user(void) {
#ifdef RGBLIGHT_COLOR_LAYER_0
rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk
index e96cd2082..2882072a6 100644
--- a/keyboards/ergodox_ez/rules.mk
+++ b/keyboards/ergodox_ez/rules.mk
@@ -16,6 +16,7 @@
# # project specific files
SRC += matrix.c
+QUANTUM_LIB_SRC += i2c_master.c
# MCU name
MCU = atmega32u4
@@ -85,9 +86,4 @@ RGBLIGHT_ENABLE = yes
RGB_MATRIX_ENABLE = no # enable later
DEBOUNCE_TYPE = eager_pr
-ifeq ($(strip $(RGB_MATRIX_ENABLE)), no)
- SRC += i2c_master.c
-endif
-
-
LAYOUTS = ergodox
diff --git a/keyboards/ergodox_infinity/keymaps/default/keymap.c b/keyboards/ergodox_infinity/keymaps/default/keymap.c
index 7f13f3d67..28b393a3d 100644
--- a/keyboards/ergodox_infinity/keymaps/default/keymap.c
+++ b/keyboards/ergodox_infinity/keymaps/default/keymap.c
@@ -141,24 +141,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- break;
- case 1:
- if (record->event.pressed) { // For resetting EEPROM
- eeconfig_init();
- }
- break;
- }
- return MACRO_NONE;
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// dynamically generate these.
diff --git a/keyboards/ergoinu/rules.mk b/keyboards/ergoinu/rules.mk
index de4bcad52..1797d03cc 100644
--- a/keyboards/ergoinu/rules.mk
+++ b/keyboards/ergoinu/rules.mk
@@ -1,7 +1,6 @@
SRC += matrix.c serial.c split_util.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ergotravel/rules.mk b/keyboards/ergotravel/rules.mk
index 55155b5a3..c88a7fa14 100644
--- a/keyboards/ergotravel/rules.mk
+++ b/keyboards/ergotravel/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/espectro/info.json b/keyboards/espectro/info.json
index 7a8c9bc0a..dc8546f53 100644
--- a/keyboards/espectro/info.json
+++ b/keyboards/espectro/info.json
@@ -117,6 +117,117 @@
]
},
+ "LAYOUT_split_bs_joined_right": {
+ "key_count": 100,
+ "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": "K60", "x": 5, "y": 0},
+ {"label": "K61", "x": 6, "y": 0},
+ {"label": "K62", "x": 7, "y": 0},
+ {"label": "K63", "x": 8, "y": 0},
+ {"label": "K05", "x": 9, "y": 0},
+ {"label": "K06", "x": 10, "y": 0},
+ {"label": "K07", "x": 11, "y": 0},
+ {"label": "K08", "x": 12, "y": 0},
+ {"label": "K72", "x": 13, "y": 0},
+ {"label": "K09", "x": 14, "y": 0},
+ {"label": "K0A", "x": 15, "y": 0},
+ {"label": "K0B", "x": 16, "y": 0},
+ {"label": "K0C", "x": 17, "y": 0},
+ {"label": "K7C", "x": 18, "y": 0},
+
+ {"label": "K10", "x": 0, "y": 1},
+ {"label": "K11", "x": 1, "y": 1},
+ {"label": "K12", "x": 2, "y": 1},
+ {"label": "K13", "x": 3, "y": 1},
+ {"label": "K14", "x": 4, "y": 1},
+ {"label": "K64", "x": 5, "y": 1},
+ {"label": "K65", "x": 6, "y": 1},
+ {"label": "K66", "x": 7, "y": 1},
+ {"label": "K67", "x": 8, "y": 1},
+ {"label": "K15", "x": 9, "y": 1},
+ {"label": "K16", "x": 10, "y": 1},
+ {"label": "K17", "x": 11, "y": 1},
+ {"label": "K18", "x": 12, "y": 1},
+ {"label": "K70", "x": 13, "y": 1},
+ {"label": "K71", "x": 14, "y": 1},
+ {"label": "K19", "x": 15, "y": 1},
+ {"label": "K1A", "x": 16, "y": 1},
+ {"label": "K1B", "x": 17, "y": 1},
+ {"label": "K1C", "x": 18, "y": 1},
+
+ {"label": "K20", "x": 0, "y": 2, "w": 1.5},
+ {"label": "K21", "x": 1.5, "y": 2},
+ {"label": "K22", "x": 2.5, "y": 2},
+ {"label": "K23", "x": 3.5, "y": 2},
+ {"label": "K24", "x": 4.5, "y": 2},
+ {"label": "K68", "x": 5.5, "y": 2},
+ {"label": "K69", "x": 6.5, "y": 2},
+ {"label": "K6A", "x": 7.5, "y": 2},
+ {"label": "K6B", "x": 8.5, "y": 2},
+ {"label": "K25", "x": 9.5, "y": 2},
+ {"label": "K26", "x": 10.5, "y": 2},
+ {"label": "K27", "x": 11.5, "y": 2},
+ {"label": "K28", "x": 12.5, "y": 2},
+ {"label": "K73", "x": 13.5, "y": 2, "w": 1.5},
+ {"label": "K29", "x": 15, "y": 2},
+ {"label": "K2A", "x": 16, "y": 2},
+ {"label": "K2B", "x": 17, "y": 2},
+ {"label": "K2C", "x": 18, "y": 2, "h": 2},
+
+ {"label": "K30", "x": 0, "y": 3, "w": 1.75},
+ {"label": "K31", "x": 1.75, "y": 3},
+ {"label": "K32", "x": 2.75, "y": 3},
+ {"label": "K33", "x": 3.75, "y": 3},
+ {"label": "K34", "x": 4.75, "y": 3},
+ {"label": "K6C", "x": 5.75, "y": 3},
+ {"label": "K75", "x": 6.75, "y": 3},
+ {"label": "K76", "x": 7.75, "y": 3},
+ {"label": "K77", "x": 8.75, "y": 3},
+ {"label": "K35", "x": 9.75, "y": 3},
+ {"label": "K36", "x": 10.75, "y": 3},
+ {"label": "K37", "x": 11.75, "y": 3},
+ {"label": "K38", "x": 12.75, "y": 3, "w": 2.25},
+ {"label": "K39", "x": 15, "y": 3},
+ {"label": "K3A", "x": 16, "y": 3},
+ {"label": "K3B", "x": 17, "y": 3},
+
+ {"label": "K40", "x": 0, "y": 4, "w": 2.25},
+ {"label": "K42", "x": 2.25, "y": 4},
+ {"label": "K43", "x": 3.25, "y": 4},
+ {"label": "K44", "x": 4.25, "y": 4},
+ {"label": "K78", "x": 5.25, "y": 4},
+ {"label": "K79", "x": 6.25, "y": 4},
+ {"label": "K7A", "x": 7.25, "y": 4},
+ {"label": "K7B", "x": 8.25, "y": 4},
+ {"label": "K45", "x": 9.25, "y": 4},
+ {"label": "K46", "x": 10.25, "y": 4},
+ {"label": "K47", "x": 11.25, "y": 4},
+ {"label": "K48", "x": 12.25, "y": 4, "w": 1.75},
+ {"label": "K74", "x": 14, "y": 4},
+ {"label": "K49", "x": 15, "y": 4},
+ {"label": "K4A", "x": 16, "y": 4},
+ {"label": "K4B", "x": 17, "y": 4},
+ {"label": "K4C", "x": 18, "y": 4, "h": 2},
+
+ {"label": "K50", "x": 0, "y": 5, "w": 1.25},
+ {"label": "K51", "x": 1.25, "y": 5, "w": 1.25},
+ {"label": "K52", "x": 2.5, "y": 5, "w": 1.25},
+ {"label": "K59", "x": 3.75, "y": 5, "w": 6.25},
+ {"label": "K55", "x": 10, "y": 5, "w": 1.5},
+ {"label": "K57", "x": 11.5, "y": 5, "w": 1.5},
+ {"label": "K58", "x": 13, "y": 5},
+ {"label": "K53", "x": 14, "y": 5},
+ {"label": "K54", "x": 15, "y": 5},
+ {"label": "K5A", "x": 16, "y": 5},
+ {"label": "K5B", "x": 17, "y": 5}
+ ]
+ },
+
"LAYOUT_split_shift_and_bs": {
"key_count": 104,
"layout": [
diff --git a/keyboards/evil80/rules.mk b/keyboards/evil80/rules.mk
index 1067b4344..d86594f98 100644
--- a/keyboards/evil80/rules.mk
+++ b/keyboards/evil80/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/exclusive/e6v2/le/rules.mk b/keyboards/exclusive/e6v2/le/rules.mk
index 7d28042d8..ffad52dbc 100644
--- a/keyboards/exclusive/e6v2/le/rules.mk
+++ b/keyboards/exclusive/e6v2/le/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -67,4 +66,4 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
-LAYOUTS = 60_ansi \ No newline at end of file
+LAYOUTS = 60_ansi
diff --git a/keyboards/exclusive/e6v2/oe/rules.mk b/keyboards/exclusive/e6v2/oe/rules.mk
index 7d28042d8..ffad52dbc 100644
--- a/keyboards/exclusive/e6v2/oe/rules.mk
+++ b/keyboards/exclusive/e6v2/oe/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -67,4 +66,4 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
-LAYOUTS = 60_ansi \ No newline at end of file
+LAYOUTS = 60_ansi
diff --git a/keyboards/exclusive/e6v2/oe_bmc/rules.mk b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
index 885bce245..a9156adeb 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32a
PROTOCOL = VUSB
diff --git a/keyboards/felix/config.h b/keyboards/felix/config.h
index 0dd8eea07..19a5247d2 100644
--- a/keyboards/felix/config.h
+++ b/keyboards/felix/config.h
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -9,40 +8,225 @@
#define DEVICE_VER 0x0001
#define MANUFACTURER Unikeyboard
#define PRODUCT Felix
-#define DESCRIPTION 4x5 number/macropad.
+#define DESCRIPTION 4x5 number/macropad
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 4
-/* key matrix pins */
+/*
+ * 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, B3, B1, F7, F6 }
#define MATRIX_COL_PINS { B5, B4, E6, D7 }
#define UNUSED_PINS
-/* COL2ROW or ROW2COL */
+/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION ROW2COL
-/* number of backlight levels */
-/* Not sure what pin controls the backlighting, need help for this. */
-#define BACKLIGHT_PIN
+/*
+ * 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 C6
#define BACKLIGHT_LEVELS 5
+//#define BACKLIGHT_BREATHING
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
-/* Set 0 if debouncing isn't needed */
+/* 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
-/* there is no rgb underglow by default. */
-#define RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 16
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
+/* 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/felix/felix.h b/keyboards/felix/felix.h
index 86a9b4e72..f43a586c8 100644
--- a/keyboards/felix/felix.h
+++ b/keyboards/felix/felix.h
@@ -1,5 +1,4 @@
-#ifndef FELIX_H
-#define FELIX_H
+#pragma once
#include "quantum.h"
@@ -18,5 +17,3 @@
}
#define LAYOUT LAYOUT_ortho_5x4
-
-#endif \ No newline at end of file
diff --git a/keyboards/felix/info.json b/keyboards/felix/info.json
index a9b3c3dd0..3b1cfda2f 100644
--- a/keyboards/felix/info.json
+++ b/keyboards/felix/info.json
@@ -6,7 +6,28 @@
"height": 5,
"layouts": {
"LAYOUT_ortho_5x4": {
- "layout": [{"label":"K000", "x":0, "y":0}, {"label":"K001", "x":1, "y":0}, {"label":"K002", "x":2, "y":0}, {"label":"K003", "x":3, "y":0}, {"label":"K100", "x":0, "y":1}, {"label":"K101", "x":1, "y":1}, {"label":"K102", "x":2, "y":1}, {"label":"K103", "x":3, "y":1}, {"label":"K200", "x":0, "y":2}, {"label":"K201", "x":1, "y":2}, {"label":"K202", "x":2, "y":2}, {"label":"K203", "x":3, "y":2}, {"label":"K300", "x":0, "y":3}, {"label":"K301", "x":1, "y":3}, {"label":"K302", "x":2, "y":3}, {"label":"K303", "x":3, "y":3}, {"label":"K400", "x":0, "y":4}, {"label":"K401", "x":1, "y":4}, {"label":"K402", "x":2, "y":4}, {"label":"K403", "x":3, "y":4}]
+ "layout": [
+ {"label":"K000", "x":0, "y":0},
+ {"label":"K001", "x":1, "y":0},
+ {"label":"K002", "x":2, "y":0},
+ {"label":"K003", "x":3, "y":0},
+ {"label":"K100", "x":0, "y":1},
+ {"label":"K101", "x":1, "y":1},
+ {"label":"K102", "x":2, "y":1},
+ {"label":"K103", "x":3, "y":1},
+ {"label":"K200", "x":0, "y":2},
+ {"label":"K201", "x":1, "y":2},
+ {"label":"K202", "x":2, "y":2},
+ {"label":"K203", "x":3, "y":2},
+ {"label":"K300", "x":0, "y":3},
+ {"label":"K301", "x":1, "y":3},
+ {"label":"K302", "x":2, "y":3},
+ {"label":"K303", "x":3, "y":3},
+ {"label":"K400", "x":0, "y":4},
+ {"label":"K401", "x":1, "y":4},
+ {"label":"K402", "x":2, "y":4},
+ {"label":"K403", "x":3, "y":4}
+ ]
}
}
}
diff --git a/keyboards/felix/keymaps/default/keymap.c b/keyboards/felix/keymaps/default/keymap.c
index a0093bf8e..630a46c08 100644
--- a/keyboards/felix/keymaps/default/keymap.c
+++ b/keyboards/felix/keymaps/default/keymap.c
@@ -1,22 +1,11 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- LAYOUT(
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
- KC_P7, KC_P8, KC_P9, KC_PPLS,
- KC_P4, KC_P5, KC_P6, KC_HOME,
- KC_P1, KC_P2, KC_P3, KC_END,
- KC_P0, KC_PEQL, KC_PDOT, KC_PENT
- ),
-
+ LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_HOME,
+ KC_P1, KC_P2, KC_P3, KC_END,
+ KC_P0, KC_PEQL, KC_PDOT, KC_PENT
+ )
};
-
-void persistant_default_layer_set(uint16_t default_layer) {
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- }
- return true;
-}
diff --git a/keyboards/felix/readme.md b/keyboards/felix/readme.md
index d671b0c01..0a3fe10a6 100644
--- a/keyboards/felix/readme.md
+++ b/keyboards/felix/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make felix:default
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/felix/rules.mk b/keyboards/felix/rules.mk
index e8f834341..b33785b64 100644
--- a/keyboards/felix/rules.mk
+++ b/keyboards/felix/rules.mk
@@ -37,22 +37,34 @@ F_USB = $(F_CPU)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-# Boot Section Size in *bytes*
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
+# 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.
+# 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
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = no
+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
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+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/fleuron/rules.mk b/keyboards/fleuron/rules.mk
index c295dc55d..8e0b084c4 100644
--- a/keyboards/fleuron/rules.mk
+++ b/keyboards/fleuron/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -68,4 +67,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
RGBLIGHT_ENABLE = yes
-LAYOUTS = ortho_6x16 \ No newline at end of file
+LAYOUTS = ortho_6x16
diff --git a/keyboards/fortitude60/rules.mk b/keyboards/fortitude60/rules.mk
index 3d1745c6f..5ea1cc5a5 100644
--- a/keyboards/fortitude60/rules.mk
+++ b/keyboards/fortitude60/rules.mk
@@ -3,7 +3,6 @@ SRC += matrix.c \
serial.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/gh60/gh60.c b/keyboards/gh60/gh60.c
index 441c799fa..10ae89359 100644
--- a/keyboards/gh60/gh60.c
+++ b/keyboards/gh60/gh60.c
@@ -15,25 +15,13 @@ extern inline void gh60_wasd_leds_off(void);
void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- gh60_caps_led_on();
- } else {
- gh60_caps_led_off();
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ gh60_caps_led_on();
+ } else {
+ gh60_caps_led_off();
}
- // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
- // gh60_esc_led_on();
- // } else {
- // gh60_esc_led_off();
- // }
-
- // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
- // gh60_fn_led_on();
- // } else {
- // gh60_fn_led_off();
- // }
-
- led_set_user(usb_led);
+ led_set_user(usb_led);
}
diff --git a/keyboards/gh60/gh60.h b/keyboards/gh60/gh60.h
index c72fb23e5..048263ba7 100644
--- a/keyboards/gh60/gh60.h
+++ b/keyboards/gh60/gh60.h
@@ -1,5 +1,4 @@
-#ifndef GH60_H
-#define GH60_H
+#pragma once
#include "quantum.h"
#include "led.h"
@@ -13,21 +12,35 @@
* B2 Capslock LED
* B0 not connected
*/
-inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
-inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
-inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
-inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
-inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
+inline void gh60_caps_led_on(void) { setPinOutput(B2); writePinLow(B2); }
+inline void gh60_poker_leds_on(void) { setPinOutput(F4); writePinLow(F4); }
+inline void gh60_fn_led_on(void) { setPinOutput(F5); writePinLow(F5); }
+inline void gh60_esc_led_on(void) { setPinOutput(F6); writePinLow(F6); }
+inline void gh60_wasd_leds_on(void) { setPinOutput(F7); writePinLow(F7); }
-inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
-inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
-inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
-inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
-inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
+inline void gh60_caps_led_off(void) { setPinInput(B2); writePinLow(B2); }
+inline void gh60_poker_leds_off(void) { setPinInput(F4); writePinLow(F4); }
+inline void gh60_fn_led_off(void) { setPinInput(F5); writePinLow(F5); }
+inline void gh60_esc_led_off(void) { setPinInput(F6); writePinLow(F6); }
+inline void gh60_wasd_leds_off(void) { setPinInput(F7); writePinLow(F7); }
/* GH60 keymap definition macro
* K2C, K31 and K3C are extra keys for ISO
*/
+#define LAYOUT_all( \
+ 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, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}
+
#define LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
@@ -35,11 +48,11 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
- { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
}
/* ANSI variant. No extra keys for ISO */
@@ -47,14 +60,14 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
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, K3D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
- { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
- { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+ { 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, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
/* ISO variant. Remove useless ANSI keys */
@@ -65,11 +78,11 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
- { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
@@ -81,11 +94,11 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
- { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
- { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
}
/* ANSI with split Right Shift. No extra keys for ISO */
@@ -96,11 +109,9 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
K40, K41, K42, K45, K4A, K4B, K4C, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
- { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
- { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+ { 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, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
-
-#endif
diff --git a/keyboards/gh60/info.json b/keyboards/gh60/info.json
index b281e6434..e2a774645 100644
--- a/keyboards/gh60/info.json
+++ b/keyboards/gh60/info.json
@@ -8,32 +8,418 @@
"width": 15,
"height": 5,
"layouts": {
+ "LAYOUT_all": {
+ "key_count": 65,
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Backspace Extra", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"ISO Hash", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"ISO Backslash", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"HHKB Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+
"LAYOUT": {
- "key_count": 65,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "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}, {"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}, {"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":"Win", "x":11, "y":4}, {"label":"Menu", "x":12, "y":4}, {"label":"Ctrl", "x":13, "y":4}, {"x":14, "y":4}]
+ "key_count": 65,
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"ISO Hash", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"ISO Backslash", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"HHKB Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Backspace Extra", "x":14, "y":0},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
},
"LAYOUT_60_ansi": {
- "key_count": 61,
- "layout": [{"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":"Backspace", "w":2}, {"x":0, "y":1, "label":"Tab", "w":1.5}, {"x":1.5, "y":1, "label":"Q"}, {"x":2.5, "y":1, "label":"W"}, {"x":3.5, "y":1, "label":"E"}, {"x":4.5, "y":1, "label":"R"}, {"x":5.5, "y":1, "label":"T"}, {"x":6.5, "y":1, "label":"Y"}, {"x":7.5, "y":1, "label":"U"}, {"x":8.5, "y":1, "label":"I"}, {"x":9.5, "y":1, "label":"O"}, {"x":10.5, "y":1, "label":"P"}, {"x":11.5, "y":1, "label":"{"}, {"x":12.5, "y":1, "label":"}"}, {"x":13.5, "y":1, "label":"|", "w":1.5}, {"x":0, "y":2, "label":"Caps Lock", "w":1.75}, {"x":1.75, "y":2, "label":"A"}, {"x":2.75, "y":2, "label":"S"}, {"x":3.75, "y":2, "label":"D"}, {"x":4.75, "y":2, "label":"F"}, {"x":5.75, "y":2, "label":"G"}, {"x":6.75, "y":2, "label":"H"}, {"x":7.75, "y":2, "label":"J"}, {"x":8.75, "y":2, "label":"K"}, {"x":9.75, "y":2, "label":"L"}, {"x":10.75, "y":2, "label":":"}, {"x":11.75, "y":2, "label":"\""}, {"x":12.75, "y":2, "label":"Enter", "w":2.25}, {"x":0, "y":3, "label":"Shift", "w":2.25}, {"x":2.25, "y":3, "label":"Z"}, {"x":3.25, "y":3, "label":"X"}, {"x":4.25, "y":3, "label":"C"}, {"x":5.25, "y":3, "label":"V"}, {"x":6.25, "y":3, "label":"B"}, {"x":7.25, "y":3, "label":"N"}, {"x":8.25, "y":3, "label":"M"}, {"x":9.25, "y":3, "label":"<"}, {"x":10.25, "y":3, "label":">"}, {"x":11.25, "y":3, "label":"?"}, {"x":12.25, "y":3, "label":"Shift", "w":2.75}, {"x":0, "y":4, "label":"Ctrl", "w":1.25}, {"x":1.25, "y":4, "label":"Win", "w":1.25}, {"x":2.5, "y":4, "label":"Alt", "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "label":"Alt", "w":1.25}, {"x":11.25, "y":4, "label":"Win", "w":1.25}, {"x":12.5, "y":4, "label":"Menu", "w":1.25}, {"x":13.75, "y":4, "label":"Ctrl", "w":1.25}]
+ "key_count": 61,
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
},
"LAYOUT_60_iso": {
- "key_count": 62,
- "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ "key_count": 62,
+ "layout": [
+ {"label":"\u00ac", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"\"", "x":2, "y":0},
+ {"label":"\u00a3", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"@", "x":11.75, "y":2},
+ {"label":"~", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"|", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"AltGr", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
},
"LAYOUT_60_ansi_split_bs_rshift": {
- "key_count": 63,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ "key_count": 63,
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Backspace Extra", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"HHKB Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"Win", "x":1.5, "y":4},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+ {"label":"Space", "x":4, "y":4, "w":6},
+ {"label":"Alt", "x":10, "y":4, "w":1.5},
+ {"label":"Win", "x":11.5, "y":4},
+ {"label":"Menu", "x":12.5, "y":4},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
},
"LAYOUT_60_ansi_split_rshift": {
"key_count": 62,
- "layout": [{"label":"K00", "x":0, "y":0}, {"label":"K01", "x":1, "y":0}, {"label":"K02", "x":2, "y":0}, {"label":"K03", "x":3, "y":0}, {"label":"K04", "x":4, "y":0}, {"label":"K05", "x":5, "y":0}, {"label":"K06", "x":6, "y":0}, {"label":"K07", "x":7, "y":0}, {"label":"K08", "x":8, "y":0}, {"label":"K09", "x":9, "y":0}, {"label":"K0A", "x":10, "y":0}, {"label":"K0B", "x":11, "y":0}, {"label":"K0C", "x":12, "y":0}, {"label":"K0D", "x":13, "y":0, "w":2}, {"label":"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":"K2D", "x":12.75, "y":2, "w":2.25}, {"label":"K30", "x":0, "y":3, "w":2.25}, {"label":"K32", "x":2.25, "y":3}, {"label":"K33", "x":3.25, "y":3}, {"label":"K34", "x":4.25, "y":3}, {"label":"K35", "x":5.25, "y":3}, {"label":"K36", "x":6.25, "y":3}, {"label":"K37", "x":7.25, "y":3}, {"label":"K38", "x":8.25, "y":3}, {"label":"K39", "x":9.25, "y":3}, {"label":"K3A", "x":10.25, "y":3}, {"label":"K3B", "x":11.25, "y":3}, {"label":"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":"K45", "x":3.75, "y":4, "w":6.25}, {"label":"K4A", "x":10, "y":4, "w":1.25}, {"label":"K4B", "x":11.25, "y":4, "w":1.25}, {"label":"K4C", "x":12.5, "y":4, "w":1.25}, {"label":"K4D", "x":13.75, "y":4, "w":1.25}]
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"HHKB Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
}
}
}
-
-
-
diff --git a/keyboards/gh60/keymaps/bluezio/rules.mk b/keyboards/gh60/keymaps/bluezio/rules.mk
index bfd26779c..4b820c974 100644
--- a/keyboards/gh60/keymaps/bluezio/rules.mk
+++ b/keyboards/gh60/keymaps/bluezio/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/gh60/keymaps/dbroqua/rules.mk b/keyboards/gh60/keymaps/dbroqua/rules.mk
index 5c6afa226..21d4b60d9 100644
--- a/keyboards/gh60/keymaps/dbroqua/rules.mk
+++ b/keyboards/gh60/keymaps/dbroqua/rules.mk
@@ -39,7 +39,6 @@
#----------------------------------------------------------------------------
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/gh60/keymaps/dbroqua_7U/rules.mk b/keyboards/gh60/keymaps/dbroqua_7U/rules.mk
index e4269566d..21192b179 100644
--- a/keyboards/gh60/keymaps/dbroqua_7U/rules.mk
+++ b/keyboards/gh60/keymaps/dbroqua_7U/rules.mk
@@ -39,7 +39,6 @@
#----------------------------------------------------------------------------
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/gh60/keymaps/default/keymap.c b/keyboards/gh60/keymaps/default/keymap.c
index 581ba7e64..a8fd4f3c2 100644
--- a/keyboards/gh60/keymaps/default/keymap.c
+++ b/keyboards/gh60/keymaps/default/keymap.c
@@ -2,47 +2,30 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: qwerty */
- LAYOUT(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
- KC_LSFT, TG(2), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_RSFT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BSLS, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
- ),
- /* 1: fn */
- 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
+ [0] = LAYOUT_all( /* 0: qwerty */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
+ KC_LSFT, TG(2), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+
+ [1] = LAYOUT_all( /* 1: fn */
+ 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [2] = LAYOUT_all( /* 2: arrows */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______,
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
- /* 2: arrows */
- LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,
- _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
};
void matrix_scan_user(void) {
diff --git a/keyboards/gh60/keymaps/robotmaxtron/rules.mk b/keyboards/gh60/keymaps/robotmaxtron/rules.mk
index 6e5d6e1ec..b6761ac9f 100644
--- a/keyboards/gh60/keymaps/robotmaxtron/rules.mk
+++ b/keyboards/gh60/keymaps/robotmaxtron/rules.mk
@@ -39,7 +39,6 @@
#----------------------------------------------------------------------------
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/gh60/readme.md b/keyboards/gh60/readme.md
index a1469accf..b63cce973 100644
--- a/keyboards/gh60/readme.md
+++ b/keyboards/gh60/readme.md
@@ -13,7 +13,7 @@ Make example for this keyboard (after setting up your build environment):
make gh60:default
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## GH60 Hardware Information
diff --git a/keyboards/gh60/rules.mk b/keyboards/gh60/rules.mk
index 37511432a..a4ee56d84 100644
--- a/keyboards/gh60/rules.mk
+++ b/keyboards/gh60/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -65,4 +64,4 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift \ No newline at end of file
+LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift
diff --git a/keyboards/gingham/config.h b/keyboards/gingham/config.h
new file mode 100644
index 000000000..53601e8ca
--- /dev/null
+++ b/keyboards/gingham/config.h
@@ -0,0 +1,250 @@
+/*
+Copyright 2019 Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID 0x8968
+#define PRODUCT_ID 0x4748
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Yiancar-Designs
+#define PRODUCT Gingham
+#define DESCRIPTION A 65 persent keyboard with only through hole components
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+/* A Custom matrix.c is used to poll the port expander C6 shows that the pins are hardwired there */
+#define MATRIX_ROW_PINS { D0, C3, D1, C1, C2 }
+#define MATRIX_COL_PINS { D4, D4, C0, B5, D5, B4, D6, B1, B0, B2, D7, B3, D4, D4 }
+#define UNUSED_PINS
+#define PORT_EXPANDER_ADDRESS 0x20
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define NO_UART 1
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+// #define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
+
diff --git a/keyboards/gingham/gingham.c b/keyboards/gingham/gingham.c
new file mode 100644
index 000000000..9a5ffe453
--- /dev/null
+++ b/keyboards/gingham/gingham.c
@@ -0,0 +1,40 @@
+/* Copyright 2019 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "gingham.h"
+#include "i2c_master.h"
+
+uint8_t send_data;
+
+void matrix_init_kb(void) {
+ // Due to the way the port expander is setup both LEDs are already outputs. This is set n matrix.copy
+ //Turn the red LED on as power indicator.
+ send_data = 0x10;
+ i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &send_data, 1, 20);
+
+ matrix_init_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // Bit 3 is Green LED, bit 4 is Red LED.
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ send_data = 0x18;
+ } else {
+ send_data = 0x10;
+ }
+ i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &send_data, 1, 20);
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/gingham/gingham.h b/keyboards/gingham/gingham.h
new file mode 100644
index 000000000..a9785b541
--- /dev/null
+++ b/keyboards/gingham/gingham.h
@@ -0,0 +1,49 @@
+/* Copyright 2019 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+#define LAYOUT_60_iso_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, 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, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, \
+ 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, 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, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
diff --git a/keyboards/gingham/info.json b/keyboards/gingham/info.json
new file mode 100644
index 000000000..ed58ef6a6
--- /dev/null
+++ b/keyboards/gingham/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Gingham",
+ "url": "https://yiancar-designs.com/product/gingham/",
+ "maintainer": "Yiancar",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "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":"Back", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Shift", "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":"Fn", "x":11.25, "y":4, "w":1.25}, {"label":"App", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "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":"Back", "x":13, "y":0}, {"label":"Delete", "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":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"ISO Hash", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"ISO \\", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Shift", "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":"Fn", "x":11.25, "y":4, "w":1.25}, {"label":"App", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/gingham/keymaps/default/keymap.c b/keyboards/gingham/keymaps/default/keymap.c
new file mode 100644
index 000000000..b5b4de5ff
--- /dev/null
+++ b/keyboards/gingham/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2018 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+//This is the ANSI version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_ansi_split_bs_rshift( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_ansi_split_bs_rshift( /* FN */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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, RESET, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_60_ansi_split_bs_rshift( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[3] = LAYOUT_60_ansi_split_bs_rshift( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+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;
+} \ No newline at end of file
diff --git a/keyboards/gingham/keymaps/default/readme.md b/keyboards/gingham/keymaps/default/readme.md
new file mode 100644
index 000000000..2f3372492
--- /dev/null
+++ b/keyboards/gingham/keymaps/default/readme.md
@@ -0,0 +1,6 @@
+The default keymap for Gingham
+==============================
+
+![Layout image](https://i.imgur.com/WwOVJTh.jpg)
+
+Default layer is normal ANSI and Fn layer is used for Volume control and arrow cluster. \ No newline at end of file
diff --git a/keyboards/gingham/keymaps/iso/keymap.c b/keyboards/gingham/keymaps/iso/keymap.c
new file mode 100644
index 000000000..0058df54a
--- /dev/null
+++ b/keyboards/gingham/keymaps/iso/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2018 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+//This is the ISO version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_iso_split_bs_rshift( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_iso_split_bs_rshift( /* FN */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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, RESET ,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_60_iso_split_bs_rshift( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[3] = LAYOUT_60_iso_split_bs_rshift( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+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;
+} \ No newline at end of file
diff --git a/keyboards/gingham/keymaps/iso/readme.md b/keyboards/gingham/keymaps/iso/readme.md
new file mode 100644
index 000000000..cd29c2890
--- /dev/null
+++ b/keyboards/gingham/keymaps/iso/readme.md
@@ -0,0 +1,6 @@
+The default keymap for ISO Gingham
+==================================
+
+![Layout image](https://i.imgur.com/WwOVJTh.jpg)
+
+Default layer is normal ISO and Fn layer is used for Volume control and arrow cluster \ No newline at end of file
diff --git a/keyboards/gingham/matrix.c b/keyboards/gingham/matrix.c
new file mode 100644
index 000000000..790ba9c28
--- /dev/null
+++ b/keyboards/gingham/matrix.c
@@ -0,0 +1,247 @@
+/*
+Copyright 2012-2019 Jun Wako, Jack Humbert, Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+#include "i2c_master.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t raw_matrix[MATRIX_ROWS]; //raw values
+static matrix_row_t matrix[MATRIX_ROWS]; //debounced values
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+//Deprecated.
+bool matrix_is_modified(void)
+{
+ if (debounce_active()) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
+ return matrix[row];
+#endif
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
+
+static void select_row(uint8_t row)
+{
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row)
+{
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInput(row_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ // Set I/O
+ uint8_t send_data = 0x07;
+ i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20);
+ // // Set Pull-up
+ i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20);
+
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ if ( (x > 0) && (x < 12) ) {
+ setPinInputHigh(col_pins[x]);
+ }
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ uint8_t pin_state;
+ // Select the col pin to read (active low)
+ switch (col_index) {
+ case 0 :
+ i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20);
+ pin_state = pin_state & 0x01;
+ break;
+ case 12 :
+ i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20);
+ pin_state = pin_state & (1 << 2);
+ break;
+ case 13 :
+ i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20);
+ pin_state = pin_state & (1 << 1);
+ break;
+ default :
+ pin_state = readPin(col_pins[col_index]);
+ }
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+void matrix_init(void) {
+
+ // Initialize I2C
+ i2c_init();
+
+ // initialize key pins
+ init_pins();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ raw_matrix[i] = 0;
+ matrix[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; 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/gingham/readme.md b/keyboards/gingham/readme.md
new file mode 100644
index 000000000..9893884e8
--- /dev/null
+++ b/keyboards/gingham/readme.md
@@ -0,0 +1,22 @@
+# Gingham
+
+![gingham](https://yiancar-designs.com/wp-content/uploads/2019/06/IMG_20190625_233619.jpg)
+
+A 60% keyboard with only through hole components.
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/gingham_pcb)
+Hardware Availability: https://yiancar-designs.com/, https://novelkeys.xyz, https://mechboards.co.uk/
+
+Make example for this keyboard (after setting up your build environment):
+ make gingham:default
+
+Flash firmware:
+ // In bootloader mode
+ make gingham:default:program
+
+Bootloader:
+use usbasploader HSGW's my repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/gingham/rules.mk b/keyboards/gingham/rules.mk
new file mode 100644
index 000000000..83f424ba0
--- /dev/null
+++ b/keyboards/gingham/rules.mk
@@ -0,0 +1,93 @@
+SRC = matrix.c \
+ i2c_master.c
+
+# MCU name
+MCU = atmega328p
+PROTOCOL = VUSB
+
+# 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
+#
+# This uses usbaspbootloader
+BOOTLOADER = USBasp
+
+# 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
+
+# Flash program via avrdude, but default command is not suitable.
+# You can use plaid:default:program
+PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
+
+# disable debug code
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+# Build Options
+# change yes to no to disable
+#
+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 = 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)
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+CUSTOM_MATRIX = yes
diff --git a/keyboards/gingham/usbconfig.h b/keyboards/gingham/usbconfig.h
new file mode 100644
index 000000000..30cdd3698
--- /dev/null
+++ b/keyboards/gingham/usbconfig.h
@@ -0,0 +1,397 @@
+/* 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.
+ */
+// max power draw with maxed white underglow measured at 120 mA (peaks)
+#define USB_CFG_MAX_BUS_POWER 100
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 0
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x01, 0x00
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'Y','i','a','n','c','a','r','-','D','e', 's', 'i', 'g', 'n', 's'
+#define USB_CFG_VENDOR_NAME_LEN 15
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME 'G', 'i', 'n', 'g', 'h', 'a', 'm'
+#define USB_CFG_DEVICE_NAME_LEN 7
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+#define USB_CFG_SERIAL_NUMBER '0'
+#define USB_CFG_SERIAL_NUMBER_LEN 1
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
+#define USB_CFG_DESCR_PROPS_STRINGS 0
+#define USB_CFG_DESCR_PROPS_STRING_0 0
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
+#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID 0
+#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
+#define USB_CFG_DESCR_PROPS_UNKNOWN 0
+
+#define usbMsgPtr_t unsigned short
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
+ * a scalar type here because gcc generates slightly shorter code for scalar
+ * arithmetics than for pointer arithmetics. Remove this define for backward
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
+ */
+
+/* ----------------------- Optional MCU Description ------------------------ */
+
+/* The following configurations have working defaults in usbdrv.h. You
+ * usually don't need to set them explicitly. Only if you want to run
+ * the driver on a device which is not yet supported or with a compiler
+ * which is not fully supported (such as IAR C) or if you use a differnt
+ * interrupt than INT0, you may have to define some of these.
+ */
+/* #define USB_INTR_CFG MCUCR */
+/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
+/* #define USB_INTR_CFG_CLR 0 */
+/* #define USB_INTR_ENABLE GIMSK */
+/* #define USB_INTR_ENABLE_BIT INT0 */
+/* #define USB_INTR_PENDING GIFR */
+/* #define USB_INTR_PENDING_BIT INTF0 */
+/* #define USB_INTR_VECTOR INT0_vect */
+
+/* Set INT1 for D- falling edge to count SOF */
+/* #define USB_INTR_CFG EICRA */
+// #define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
+// /* #define USB_INTR_CFG_CLR 0 */
+// /* #define USB_INTR_ENABLE EIMSK */
+// #define USB_INTR_ENABLE_BIT INT1
+// /* #define USB_INTR_PENDING EIFR */
+// #define USB_INTR_PENDING_BIT INTF1
+// #define USB_INTR_VECTOR INT1_vect
+
+#endif /* __usbconfig_h_included__ */
diff --git a/keyboards/gonnerd/keymaps/gam3cat/keymap.c b/keyboards/gonnerd/keymaps/gam3cat/keymap.c
index f01dd920e..3142209d6 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/keymap.c
+++ b/keyboards/gonnerd/keymaps/gam3cat/keymap.c
@@ -12,10 +12,10 @@ enum layers {
};
enum custom_keycodes {
- DYNAMIC_MACRO_RANGE = SAFE_RANGE,
- QMK_REV,
+ QMK_REV = SAFE_RANGE,
KC_WEB,
- KC_SP4
+ KC_SP4,
+ DYNAMIC_MACRO_RANGE
};
extern backlight_config_t backlight_config;
diff --git a/keyboards/gonnerd/keymaps/gam3cat/rules.mk b/keyboards/gonnerd/keymaps/gam3cat/rules.mk
index 55e681efb..6eab033cc 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/rules.mk
+++ b/keyboards/gonnerd/keymaps/gam3cat/rules.mk
@@ -22,4 +22,3 @@ FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By defaul
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
-
diff --git a/keyboards/gray_studio/cod67/keymaps/default/keymap.c b/keyboards/gray_studio/cod67/keymaps/default/keymap.c
index 9e1273a18..245d7eee6 100644
--- a/keyboards/gray_studio/cod67/keymaps/default/keymap.c
+++ b/keyboards/gray_studio/cod67/keymaps/default/keymap.c
@@ -26,22 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/gray_studio/cod67/rules.mk b/keyboards/gray_studio/cod67/rules.mk
index 45eb6ee37..6cba6b6b8 100644
--- a/keyboards/gray_studio/cod67/rules.mk
+++ b/keyboards/gray_studio/cod67/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hadron/ver2/keymaps/default/keymap.c b/keyboards/hadron/ver2/keymaps/default/keymap.c
index 9d96abd8d..41802d38c 100644
--- a/keyboards/hadron/ver2/keymaps/default/keymap.c
+++ b/keyboards/hadron/ver2/keymaps/default/keymap.c
@@ -37,10 +37,7 @@ enum preonic_keycodes {
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL,
-};
-
-enum macro_keycodes {
- KC_DEMOMACRO,
+ DEMOMACRO
};
// Custom macros
@@ -51,7 +48,6 @@ enum macro_keycodes {
// Requires KC_TRNS/_______ for the trigger key in the destination layer
#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
#define LT_RAI(kc) LT(_RAISE, kc) // L-ayer T-ap to Raise
-#define DEMOMACRO M(KC_DEMOMACRO) // Sample for macros
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -302,32 +298,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
+ case DEMOMACRO:
+ if (record->event.pressed) {
+ SEND_STRING("hello world");
+ }
+ return false;
+ break;
}
return true;
}
-
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
-
- switch (id) {
- case KC_DEMOMACRO:
- if (record->event.pressed){
- return MACRO (I(1), T(H),T(E),T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END);
- }
- }
-
- return MACRO_NONE;
-}
-
-
//Functions for ver2
#ifdef KEYBOARD_hadron_ver2
#include "LUFA/Drivers/Peripheral/TWI.h"
diff --git a/keyboards/hadron/ver2/rules.mk b/keyboards/hadron/ver2/rules.mk
index c47bdb1af..7af5d1847 100644
--- a/keyboards/hadron/ver2/rules.mk
+++ b/keyboards/hadron/ver2/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -73,4 +72,4 @@ EXTRAFLAGS += -flto
SRC = i2c.c \
- ssd1306.c \ No newline at end of file
+ ssd1306.c
diff --git a/keyboards/hadron/ver3/config.h b/keyboards/hadron/ver3/config.h
index 5e44b27ae..2912486f4 100644
--- a/keyboards/hadron/ver3/config.h
+++ b/keyboards/hadron/ver3/config.h
@@ -44,7 +44,6 @@
#define MATRIX_COL_PINS { B8, B2, B10, A0, A1, A2, B0, A3, B1, A6, A7, B12, C13, B11, B9 }
#define UNUSED_PINS
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B13 }
#define ENCODERS_PAD_B { B14 }
diff --git a/keyboards/hadron/ver3/keymaps/default/keymap.c b/keyboards/hadron/ver3/keymaps/default/keymap.c
index 9afddba26..749c385c8 100644
--- a/keyboards/hadron/ver3/keymaps/default/keymap.c
+++ b/keyboards/hadron/ver3/keymaps/default/keymap.c
@@ -27,10 +27,7 @@ enum preonic_keycodes {
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL,
-};
-
-enum macro_keycodes {
- KC_DEMOMACRO,
+ DEMOMACRO
};
// Custom macros
@@ -41,8 +38,6 @@ enum macro_keycodes {
// Requires KC_TRNS/_______ for the trigger key in the destination layer
#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
#define LT_RAI(kc) LT(_RAISE, kc) // L-ayer T-ap to Raise
-#define DEMOMACRO M(KC_DEMOMACRO) // Sample for macros
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -248,6 +243,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
+ case DEMOMACRO:
+ if (record->event.pressed) {
+ SEND_STRING("hello world");
+ }
}
return true;
}
@@ -262,27 +261,6 @@ bool music_mask_user(uint16_t keycode) {
}
}
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
-
- switch (id) {
- case KC_DEMOMACRO:
- if (record->event.pressed){
- return MACRO (I(1), T(H),T(E),T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END);
- }
- }
-
- return MACRO_NONE;
-}
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/halberd/config.h b/keyboards/halberd/config.h
index 32930d778..cf3460b61 100644
--- a/keyboards/halberd/config.h
+++ b/keyboards/halberd/config.h
@@ -111,13 +111,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-/* 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
diff --git a/keyboards/handwired/108key_trackpoint/rules.mk b/keyboards/handwired/108key_trackpoint/rules.mk
index 84ec52eee..47d94671c 100644
--- a/keyboards/handwired/108key_trackpoint/rules.mk
+++ b/keyboards/handwired/108key_trackpoint/rules.mk
@@ -1,6 +1,5 @@
# MCU name
MCU = at90usb1286
-#MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
diff --git a/keyboards/handwired/412_64/keymaps/default/keymap.c b/keyboards/handwired/412_64/keymaps/default/keymap.c
index 405c56305..27966eb9a 100644
--- a/keyboards/handwired/412_64/keymaps/default/keymap.c
+++ b/keyboards/handwired/412_64/keymaps/default/keymap.c
@@ -71,17 +71,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- keyevent_t event = record->event;
- (void)event;
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/handwired/6macro/6macro.c b/keyboards/handwired/6macro/6macro.c
new file mode 100644
index 000000000..0a62bedf1
--- /dev/null
+++ b/keyboards/handwired/6macro/6macro.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 joaofbmaia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "6macro.h"
diff --git a/keyboards/handwired/6macro/6macro.h b/keyboards/handwired/6macro/6macro.h
new file mode 100644
index 000000000..c1d500512
--- /dev/null
+++ b/keyboards/handwired/6macro/6macro.h
@@ -0,0 +1,35 @@
+/* Copyright 2019 joaofbmaia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/handwired/6macro/config.h b/keyboards/handwired/6macro/config.h
new file mode 100644
index 000000000..7919c3c71
--- /dev/null
+++ b/keyboards/handwired/6macro/config.h
@@ -0,0 +1,70 @@
+/*
+Copyright 2019 joaofbmaia
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0x0037
+#define DEVICE_VER 0x0001
+#define MANUFACTURER joaofbmaia
+#define PRODUCT 6macro
+#define DESCRIPTION 6macro
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 3
+
+/* pinout - DON'T CHANGE */
+#define MATRIX_ROW_PINS { B3, B4 }
+#define MATRIX_COL_PINS { B0, B1, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN D2
+#define RGBLED_NUM 10
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+#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
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5 \ No newline at end of file
diff --git a/keyboards/handwired/6macro/info.json b/keyboards/handwired/6macro/info.json
new file mode 100644
index 000000000..52bd03a1d
--- /dev/null
+++ b/keyboards/handwired/6macro/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "6macro",
+ "url": "",
+ "maintainer": "joaofbmaia",
+ "width": 3,
+ "height": 2,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}]
+ }
+ }
+ }
+ \ No newline at end of file
diff --git a/keyboards/handwired/6macro/keymaps/default/config.h b/keyboards/handwired/6macro/keymaps/default/config.h
new file mode 100644
index 000000000..64ba57443
--- /dev/null
+++ b/keyboards/handwired/6macro/keymaps/default/config.h
@@ -0,0 +1,18 @@
+/* Copyright 2019 joaofbmaia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
diff --git a/keyboards/handwired/6macro/keymaps/default/keymap.c b/keyboards/handwired/6macro/keymaps/default/keymap.c
new file mode 100644
index 000000000..365dbf7b0
--- /dev/null
+++ b/keyboards/handwired/6macro/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
+/* Copyright 2019 joaofbmaia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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] = {
+
+ /* LAYER 0
+ * ,-----------------------.
+ * | F13 | F14 | F15/FN| Hold for FN
+ * |-------+-------+-------|
+ * | F16 | F17 | F18 |
+ * `-------+-------+-------'
+ */
+ [0] = LAYOUT(
+ KC_F13, KC_F14, LT(1, KC_F15), \
+ KC_F16, KC_F17, KC_F18 \
+ ),
+
+ /* LAYER 1
+ * ,-----------------------.
+ * |RGB_TOG|RGBMOD+| |
+ * |-------+-------+-------|
+ * |RGBHUE+|RGBBRI+|Spec FN| Hold along with previous to access special funtions (RESET)
+ * `-------+-------+-------'
+ */
+ [1] = LAYOUT(
+ RGB_TOG, RGB_MOD, KC_TRNS, \
+ RGB_HUI, RGB_VAI, MO(2) \
+ ),
+
+ /* LAYER 2
+ * ,-----------------------.
+ * | RESET |RGBMOD-| |
+ * |-------+-------+-------|
+ * |RGBHUE-|RGBBRI-| |
+ * `-------+-------+-------'
+ */
+ [2] = LAYOUT(
+ RESET, RGB_RMOD, KC_NO, \
+ RGB_HUD, RGB_VAD, KC_TRNS \
+ )
+
+};
diff --git a/keyboards/handwired/6macro/keymaps/default/readme.md b/keyboards/handwired/6macro/keymaps/default/readme.md
new file mode 100644
index 000000000..dd42a8fc6
--- /dev/null
+++ b/keyboards/handwired/6macro/keymaps/default/readme.md
@@ -0,0 +1,15 @@
+Layer 0:
+
+![Layer 0](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer0_default.png)
+
+Layer 1:
+
+![Layer 1](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer1.png)
+
+Layer 2:
+
+![Layer 2](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer2.png)
+
+# Default 6macro Layout
+
+This is the default layout. Layer 0 is mappped to function keys 13-18. Top right key switches to layer above when held. Upper layers are for RGB control. \ No newline at end of file
diff --git a/keyboards/handwired/6macro/keymaps/osu/config.h b/keyboards/handwired/6macro/keymaps/osu/config.h
new file mode 100644
index 000000000..64ba57443
--- /dev/null
+++ b/keyboards/handwired/6macro/keymaps/osu/config.h
@@ -0,0 +1,18 @@
+/* Copyright 2019 joaofbmaia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
diff --git a/keyboards/handwired/6macro/keymaps/osu/keymap.c b/keyboards/handwired/6macro/keymaps/osu/keymap.c
new file mode 100644
index 000000000..ffed7d909
--- /dev/null
+++ b/keyboards/handwired/6macro/keymaps/osu/keymap.c
@@ -0,0 +1,56 @@
+/* Copyright 2019 joaofbmaia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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] = {
+
+ /* LAYER 0
+ * ,-----------------------.
+ * | ESC | ~ | SPC/FN| Hold for FN
+ * |-------+-------+-------|
+ * | C | Z | X |
+ * `-------+-------+-------'
+ */
+ [0] = LAYOUT(
+ KC_ESC, KC_GRAVE, LT(1, KC_SPC), \
+ KC_C, KC_Z, KC_X \
+ ),
+
+ /* LAYER 1
+ * ,-----------------------.
+ * |RGB_TOG|RGBMOD+| |
+ * |-------+-------+-------|
+ * |RGBHUE+|RGBBRI+|Spec FN| Hold along with previous to access special funtions (RESET)
+ * `-------+-------+-------'
+ */
+ [1] = LAYOUT(
+ RGB_TOG, RGB_MOD, KC_TRNS, \
+ RGB_HUI, RGB_VAI, MO(2) \
+ ),
+
+ /* LAYER 2
+ * ,-----------------------.
+ * | RESET |RGBMOD-| |
+ * |-------+-------+-------|
+ * |RGBHUE-|RGBBRI-| |
+ * `-------+-------+-------'
+ */
+ [2] = LAYOUT(
+ RESET, RGB_RMOD, KC_NO, \
+ RGB_HUD, RGB_VAD, KC_TRNS \
+ )
+
+};
diff --git a/keyboards/handwired/6macro/keymaps/osu/readme.md b/keyboards/handwired/6macro/keymaps/osu/readme.md
new file mode 100644
index 000000000..0de5d6bf2
--- /dev/null
+++ b/keyboards/handwired/6macro/keymaps/osu/readme.md
@@ -0,0 +1,15 @@
+Layer 0:
+
+![Layer 0](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer0_osu.png)
+
+Layer 1:
+
+![Layer 1](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer1.png)
+
+Layer 2:
+
+![Layer 2](https://raw.githubusercontent.com/joaofbmaia/6macro/master/layer2.png)
+
+# OSU 6macro Layout
+
+This layout is for the game OSU. Layer 0 is mappped as shown above. Top right key switches to layer above when held. Upper layers are for RGB control. \ No newline at end of file
diff --git a/keyboards/handwired/6macro/readme.md b/keyboards/handwired/6macro/readme.md
new file mode 100644
index 000000000..3fbd917c8
--- /dev/null
+++ b/keyboards/handwired/6macro/readme.md
@@ -0,0 +1,15 @@
+# 6macro
+
+![6macro photo](https://raw.githubusercontent.com/joaofbmaia/6macro/master/photo.jpg)
+![6macro photo with RGB](https://raw.githubusercontent.com/joaofbmaia/6macro/master/photo_rgb.jpg)
+
+This is a 6-key keyboard intended for macros or as a dedicated controller for games with few bindings.
+
+Keyboard Maintainer: [joaofbmaia](https://github.com/joaofbmaia)
+Hardware: https://github.com/joaofbmaia/6macro
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/6macro: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/6macro/rules.mk b/keyboards/handwired/6macro/rules.mk
new file mode 100644
index 000000000..fc886fb9a
--- /dev/null
+++ b/keyboards/handwired/6macro/rules.mk
@@ -0,0 +1,81 @@
+# 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 = 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
+# 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
+#RGB_MATRIX_ENABLE = WS2812 # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
+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 = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/handwired/arrow_pad/rules.mk b/keyboards/handwired/arrow_pad/rules.mk
index a03f0836b..7e68eb599 100644
--- a/keyboards/handwired/arrow_pad/rules.mk
+++ b/keyboards/handwired/arrow_pad/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -67,4 +64,4 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6 \ No newline at end of file
+AUDIO_ENABLE = no # Audio output on port C6
diff --git a/keyboards/handwired/atreus50/rules.mk b/keyboards/handwired/atreus50/rules.mk
index 21c4704e0..1db2bfa92 100644
--- a/keyboards/handwired/atreus50/rules.mk
+++ b/keyboards/handwired/atreus50/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/dactyl/keymaps/default/keymap.c b/keyboards/handwired/dactyl/keymaps/default/keymap.c
index db666f43f..07d958449 100644
--- a/keyboards/handwired/dactyl/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl/keymaps/default/keymap.c
@@ -137,24 +137,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- break;
- case 1:
- if (record->event.pressed) { // For resetting EEPROM
- eeconfig_init();
- }
- break;
- }
- return MACRO_NONE;
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case VRSN:
diff --git a/keyboards/handwired/dactyl_manuform/rules.mk b/keyboards/handwired/dactyl_manuform/rules.mk
index a93de3685..37806fa16 100644
--- a/keyboards/handwired/dactyl_manuform/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/dactyl_promicro/rules.mk b/keyboards/handwired/dactyl_promicro/rules.mk
index a93de3685..37806fa16 100644
--- a/keyboards/handwired/dactyl_promicro/rules.mk
+++ b/keyboards/handwired/dactyl_promicro/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/daishi/config.h b/keyboards/handwired/daishi/config.h
index 15ff6a6a6..b4665bece 100644
--- a/keyboards/handwired/daishi/config.h
+++ b/keyboards/handwired/daishi/config.h
@@ -52,10 +52,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5
/* Set up rotary encoder */
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { F1 }
#define ENCODERS_PAD_B { F0 }
#define ENCODER_RESOLUTION 2
/* Set delay for tap_code on rotary encoder */
-#define TAP_CODE_DELAY 10 \ No newline at end of file
+#define TAP_CODE_DELAY 10
diff --git a/keyboards/handwired/downbubble/rules.mk b/keyboards/handwired/downbubble/rules.mk
index 87d0d4a1e..c751d9d4a 100644
--- a/keyboards/handwired/downbubble/rules.mk
+++ b/keyboards/handwired/downbubble/rules.mk
@@ -1,6 +1,5 @@
# MCU name
MCU = at90usb1286
-#MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
diff --git a/keyboards/handwired/frenchdev/keymaps/default/keymap.c b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
index 7b82f36e3..b0713b730 100644
--- a/keyboards/handwired/frenchdev/keymaps/default/keymap.c
+++ b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
@@ -12,8 +12,8 @@
#define PEDAL_DELAY 250
#define KEY_DELAY 130
-enum macros {
- M_LP = SAFE_RANGE, // left pedal
+enum custom_keycodes {
+ M_LP = SAFE_RANGE, // left pedal
M_RP, // right pedal
M_SF, // shift
M_SFS, // shift and space
diff --git a/keyboards/handwired/gamenum/keymaps/default/keymap.c b/keyboards/handwired/gamenum/keymaps/default/keymap.c
index 7d667cd39..237b0fb92 100644
--- a/keyboards/handwired/gamenum/keymaps/default/keymap.c
+++ b/keyboards/handwired/gamenum/keymaps/default/keymap.c
@@ -29,11 +29,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
-
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case TO(HDN):
diff --git a/keyboards/handwired/hacked_motospeed/rules.mk b/keyboards/handwired/hacked_motospeed/rules.mk
index 1dc955718..17d71ada4 100644
--- a/keyboards/handwired/hacked_motospeed/rules.mk
+++ b/keyboards/handwired/hacked_motospeed/rules.mk
@@ -1,6 +1,5 @@
# MCU name
MCU = at90usb1286
-#MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
@@ -78,4 +77,4 @@ 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) \ No newline at end of file
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/handwired/jn68m/rules.mk b/keyboards/handwired/jn68m/rules.mk
index 42d85ada1..fa95254d8 100644
--- a/keyboards/handwired/jn68m/rules.mk
+++ b/keyboards/handwired/jn68m/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/kbod/keymaps/default/keymap.c b/keyboards/handwired/kbod/keymaps/default/keymap.c
index 49083820a..3119784e2 100644
--- a/keyboards/handwired/kbod/keymaps/default/keymap.c
+++ b/keyboards/handwired/kbod/keymaps/default/keymap.c
@@ -75,11 +75,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- return MACRO_NONE;
-};
-
void led_set_user(uint8_t usb_led) {
if (usb_led & _BV(USB_LED_CAPS_LOCK)) {
PORTB |= _BV(PB0);
diff --git a/keyboards/handwired/kbod/rules.mk b/keyboards/handwired/kbod/rules.mk
index b97cacd5c..55ab9f350 100644
--- a/keyboards/handwired/kbod/rules.mk
+++ b/keyboards/handwired/kbod/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/lovelive9/rules.mk b/keyboards/handwired/lovelive9/rules.mk
index 99a531a63..8ec4ed3d6 100644
--- a/keyboards/handwired/lovelive9/rules.mk
+++ b/keyboards/handwired/lovelive9/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/mechboards_micropad/rules.mk b/keyboards/handwired/mechboards_micropad/rules.mk
index 8ac2297e4..033ccaf84 100644
--- a/keyboards/handwired/mechboards_micropad/rules.mk
+++ b/keyboards/handwired/mechboards_micropad/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk
index 3e408e2b9..3e8d82856 100644
--- a/keyboards/handwired/minorca/rules.mk
+++ b/keyboards/handwired/minorca/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -64,4 +63,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/not_so_minidox/rules.mk b/keyboards/handwired/not_so_minidox/rules.mk
index 833dd4b79..d87356519 100644
--- a/keyboards/handwired/not_so_minidox/rules.mk
+++ b/keyboards/handwired/not_so_minidox/rules.mk
@@ -4,7 +4,6 @@ SRC += matrix.c \
serial.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/numbrero/readme.md b/keyboards/handwired/numbrero/readme.md
index 42f005dbe..931c60127 100644
--- a/keyboards/handwired/numbrero/readme.md
+++ b/keyboards/handwired/numbrero/readme.md
@@ -8,6 +8,6 @@ Hardware Availability: The Board Podcast Slack
Make example for this keyboard (after setting up your build environment):
- make handwired/numbrero/numbrero:default
+ make handwired/numbrero:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/pilcrow/rules.mk b/keyboards/handwired/pilcrow/rules.mk
index 67badc820..762ae481e 100644
--- a/keyboards/handwired/pilcrow/rules.mk
+++ b/keyboards/handwired/pilcrow/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index 21328b7f8..172264300 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -47,7 +46,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)
@@ -62,7 +61,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
PS2_USE_INT = yes
API_SYSEX_ENABLE = no
@@ -76,3 +75,5 @@ SRC += ws2812.c
SRC += rgbsps.c
SRC += analog.c
SRC += matrix.c
+
+LINK_TIME_OPTIMIZATION_ENABLE = yes
diff --git a/keyboards/handwired/qc60/rules.mk b/keyboards/handwired/qc60/rules.mk
index e61b18b00..b487dd96e 100644
--- a/keyboards/handwired/qc60/rules.mk
+++ b/keyboards/handwired/qc60/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/reddot/rules.mk b/keyboards/handwired/reddot/rules.mk
index 00ca06dd4..8afe6fc63 100755
--- a/keyboards/handwired/reddot/rules.mk
+++ b/keyboards/handwired/reddot/rules.mk
@@ -1,5 +1,4 @@
-
-#MCU = at90usb1287
+# MCU name
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/retro_refit/rules.mk b/keyboards/handwired/retro_refit/rules.mk
index 98aa19e6b..2884ef2cb 100644
--- a/keyboards/handwired/retro_refit/rules.mk
+++ b/keyboards/handwired/retro_refit/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/terminus_mini/rules.mk b/keyboards/handwired/terminus_mini/rules.mk
index 9ecba25d8..1093901c0 100644
--- a/keyboards/handwired/terminus_mini/rules.mk
+++ b/keyboards/handwired/terminus_mini/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
index 44f65f4b8..4802b0534 100644
--- a/keyboards/handwired/traveller/keymaps/default/keymap.c
+++ b/keyboards/handwired/traveller/keymaps/default/keymap.c
@@ -15,13 +15,13 @@
#define RGBLED_TOGGLE 10
#define _HIOUT 15
#define _LWOUT 16
-// Macros
-#define MDL 4
-#define MDR 5
-#define MUR 6
-#define MUL 3
-
+enum custom_keycodes {
+ M_MUL = SAFE_RANGE,
+ M_MDL,
+ M_MDR,
+ M_MUR
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -102,9 +102,9 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
*/
[_NAV] = KEYMAP(
- TG(_NAV), KC_NO, KC_NO, KC_UP, KC_NO, RGUI(KC_RIGHT), KC_WH_U, M(MUL), KC_MS_U, M(MUR), KC_NO, KC_ACL2,
+ TG(_NAV), KC_NO, KC_NO, KC_UP, KC_NO, RGUI(KC_RIGHT), KC_WH_U, M_MUL, KC_MS_U, M_MUR, KC_NO, KC_ACL2,
KC_TRNS, RGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), KC_BTN3, KC_MS_L, KC_MS_U, KC_MS_R, KC_NO, KC_ACL1,
- KC_TRNS, LCTL(KC_A), LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO, KC_ENTER, KC_WH_D, M(MDL), KC_MS_D, M(MDR), KC_UP, KC_ACL0,
+ KC_TRNS, LCTL(KC_A), LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO, KC_ENTER, KC_WH_D, M_MDL, KC_MS_D, M_MDR, KC_UP, KC_ACL0,
KC_TRNS, RGUI(KC_Z), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
),
@@ -152,23 +152,10 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- break;
-
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
// from algernon's ErgoDox EZ layout,
- case MUL:
+ case M_MUL:
if (record->event.pressed) {
mousekey_on(KC_MS_UP);
mousekey_on(KC_MS_LEFT);
@@ -177,9 +164,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
mousekey_off(KC_MS_LEFT);
}
mousekey_send();
- break;
+ return false;
- case MUR:
+ case M_MUR:
if (record->event.pressed) {
mousekey_on(KC_MS_UP);
mousekey_on(KC_MS_RIGHT);
@@ -188,9 +175,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
mousekey_off(KC_MS_RIGHT);
}
mousekey_send();
- break;
+ return false;
- case MDL:
+ case M_MDL:
if (record->event.pressed) {
mousekey_on(KC_MS_DOWN);
mousekey_on(KC_MS_LEFT);
@@ -199,9 +186,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
mousekey_off(KC_MS_LEFT);
}
mousekey_send();
- break;
+ return false;
- case MDR:
+ case M_MDR:
if (record->event.pressed) {
mousekey_on(KC_MS_DOWN);
mousekey_on(KC_MS_RIGHT);
@@ -210,11 +197,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
mousekey_off(KC_MS_RIGHT);
}
mousekey_send();
- break;
-
-
+ return false;
+ default:
+ return true;
}
- return MACRO_NONE;
+ return true;
};
void LayerLEDSet(uint8_t layr) {
@@ -262,11 +249,6 @@ 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/traveller/rules.mk b/keyboards/handwired/traveller/rules.mk
index 8568def35..03673fdd1 100644
--- a/keyboards/handwired/traveller/rules.mk
+++ b/keyboards/handwired/traveller/rules.mk
@@ -1,5 +1,4 @@
-
-#MCU = at90usb1287
+# MCU name
MCU = atmega32u4
# Processor frequency.
@@ -58,8 +57,6 @@ endif
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-# MCU name
-
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
diff --git a/keyboards/handwired/woodpad/rules.mk b/keyboards/handwired/woodpad/rules.mk
index f8c488307..4bdc561a6 100644
--- a/keyboards/handwired/woodpad/rules.mk
+++ b/keyboards/handwired/woodpad/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/handwired/wulkan/README.md b/keyboards/handwired/wulkan/README.md
new file mode 100644
index 000000000..c6ea77389
--- /dev/null
+++ b/keyboards/handwired/wulkan/README.md
@@ -0,0 +1,14 @@
+# wulkan
+
+Handwired 40% keyboard build with Proton C.
+
+Keyboard Maintainer: [Napoleon Wulkan](https://github.com/wulkan)
+Hardware Supported: Proton C
+Hardware Availability: [OLKB.com](https://olkb.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/wulkan:default:dfu-util
+
+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/wulkan/config.h b/keyboards/handwired/wulkan/config.h
new file mode 100644
index 000000000..4a9cbada7
--- /dev/null
+++ b/keyboards/handwired/wulkan/config.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Wulkan
+#define PRODUCT Handwired48Keys
+#define DESCRIPTION A compact ortholinear handwired keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+#define MATRIX_ROW_PINS { B8, A0, A1, A2 }
+#define MATRIX_COL_PINS { B13, B14, B15, B9, B7, B6, B5, B4, B3, B2, B1, B0 }
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define FORCE_NKRO
diff --git a/keyboards/handwired/wulkan/info.json b/keyboards/handwired/wulkan/info.json
new file mode 100644
index 000000000..db292af3d
--- /dev/null
+++ b/keyboards/handwired/wulkan/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "wulkan",
+ "url": "",
+ "maintainer": "Napoleon Wulkan",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x12": {
+ "key_count": 48,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
+ }
+ }
+ }
diff --git a/keyboards/handwired/wulkan/keymaps/default/keymap.c b/keyboards/handwired/wulkan/keymaps/default/keymap.c
new file mode 100644
index 000000000..5134fb000
--- /dev/null
+++ b/keyboards/handwired/wulkan/keymaps/default/keymap.c
@@ -0,0 +1,111 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum unicode_names {
+ SE_AA_HIGH,
+ SE_AE_HIGH,
+ SE_OE_HIGH,
+ SE_AA_LOW,
+ SE_AE_LOW,
+ SE_OE_LOW,
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [SE_AA_HIGH] = 0x00C5,
+ [SE_AE_HIGH] = 0x00C4,
+ [SE_OE_HIGH] = 0x00D6,
+ [SE_AA_LOW] = 0x00E5,
+ [SE_AE_LOW] = 0x00E4,
+ [SE_OE_LOW] = 0x00F6,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | GUI |Lower |Enter |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | Å | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | Ö | Ä | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12(
+ _______, RESET, _______, _______, KC_WH_U, _______, _______, KC_MS_U, _______, _______, XP(SE_AA_LOW, SE_AA_HIGH), KC_DEL,
+ _______, _______, _______, _______, KC_WH_D, _______, KC_MS_L, KC_MS_D, KC_MS_R, XP(SE_OE_LOW, SE_OE_HIGH), XP(SE_AE_LOW, SE_AE_HIGH), _______,
+ _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, KC_BTN1, _______, KC_BTN2, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void eeconfig_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+}
diff --git a/keyboards/handwired/wulkan/keymaps/default/rules.mk b/keyboards/handwired/wulkan/keymaps/default/rules.mk
new file mode 100644
index 000000000..502b2def7
--- /dev/null
+++ b/keyboards/handwired/wulkan/keymaps/default/rules.mk
@@ -0,0 +1 @@
+UNICODEMAP_ENABLE = yes
diff --git a/keyboards/handwired/wulkan/rules.mk b/keyboards/handwired/wulkan/rules.mk
new file mode 100644
index 000000000..3f881b7f1
--- /dev/null
+++ b/keyboards/handwired/wulkan/rules.mk
@@ -0,0 +1,22 @@
+MCU = STM32F303
+
+# 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
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+LAYOUTS = ortho_4x12
+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
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+NO_SUSPEND_POWER_DOWN = yes
+UNICODEMAP_ENABLE = no
diff --git a/keyboards/handwired/wulkan/wulkan.c b/keyboards/handwired/wulkan/wulkan.c
new file mode 100644
index 000000000..5409fa5b5
--- /dev/null
+++ b/keyboards/handwired/wulkan/wulkan.c
@@ -0,0 +1,6 @@
+#include "wulkan.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
diff --git a/keyboards/handwired/wulkan/wulkan.h b/keyboards/handwired/wulkan/wulkan.h
new file mode 100644
index 000000000..cb4882ac9
--- /dev/null
+++ b/keyboards/handwired/wulkan/wulkan.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+#define LAYOUT_ortho_4x12( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B } \
+}
+
+
+#define LAYOUT LAYOUT_ortho_4x12
diff --git a/keyboards/hecomi/alpha/rules.mk b/keyboards/hecomi/alpha/rules.mk
index 3e726f1d6..06434e962 100644
--- a/keyboards/hecomi/alpha/rules.mk
+++ b/keyboards/hecomi/alpha/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hecomi/rules.mk b/keyboards/hecomi/rules.mk
index 19b763d43..5fddc1395 100644
--- a/keyboards/hecomi/rules.mk
+++ b/keyboards/hecomi/rules.mk
@@ -2,7 +2,6 @@ DEFAULT_FOLDER=hecomi/alpha
#
#
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c b/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
index 637f1d169..6bee91786 100644
--- a/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
+++ b/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
@@ -41,15 +41,9 @@ enum custom_keycodes {
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL,
+ M_SAMPLE
};
-enum macro_keycodes {
- KC_SAMPLEMACRO,
-};
-
-//Macros
-#define M_SAMPLE M(KC_SAMPLEMACRO)
-
#if HELIX_ROWS == 5
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -423,6 +417,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
+ case M_SAMPLE:
+ if (record->event.pressed) {
+ SEND_STRING("hello world");
+ }
+ return false;
}
return true;
}
@@ -470,23 +469,3 @@ void music_scale_user(void)
}
#endif
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
-
- switch (id) {
- case KC_SAMPLEMACRO:
- if (record->event.pressed){
- return MACRO (I(10), T(H), T(E), T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END);
- }
-
- }
-
- return MACRO_NONE;
-}
diff --git a/keyboards/helix/rules.mk b/keyboards/helix/rules.mk
index be234e60e..b3eea4028 100644
--- a/keyboards/helix/rules.mk
+++ b/keyboards/helix/rules.mk
@@ -3,7 +3,6 @@ SRC += serial.c
SRC += ssd1306.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hhkb/keymaps/default/keymap.c b/keyboards/hhkb/keymaps/default/keymap.c
index af6102f10..c63ef6a57 100644
--- a/keyboards/hhkb/keymaps/default/keymap.c
+++ b/keyboards/hhkb/keymaps/default/keymap.c
@@ -54,22 +54,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch (id)
- {
- case 0:
- if (record->event.pressed)
- {
- register_code(KC_RSFT);
- }
- else
- {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk
index 3abd31c33..0483a2a87 100644
--- a/keyboards/hhkb/rules.mk
+++ b/keyboards/hhkb/rules.mk
@@ -4,7 +4,6 @@
SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hid_liber/keymaps/default/keymap.c b/keyboards/hid_liber/keymaps/default/keymap.c
index 8140edc00..1102b0b96 100755
--- a/keyboards/hid_liber/keymaps/default/keymap.c
+++ b/keyboards/hid_liber/keymaps/default/keymap.c
@@ -43,22 +43,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/hid_liber/rules.mk b/keyboards/hid_liber/rules.mk
index f28a4c6ae..8d4348849 100755
--- a/keyboards/hid_liber/rules.mk
+++ b/keyboards/hid_liber/rules.mk
@@ -2,7 +2,6 @@
SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hifumi/rules.mk b/keyboards/hifumi/rules.mk
index 98560f058..53be9fb8a 100644
--- a/keyboards/hifumi/rules.mk
+++ b/keyboards/hifumi/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hineybush/h87a/keymaps/default/keymap.c b/keyboards/hineybush/h87a/keymaps/default/keymap.c
index 6382af1ee..974a7e35b 100644
--- a/keyboards/hineybush/h87a/keymaps/default/keymap.c
+++ b/keyboards/hineybush/h87a/keymaps/default/keymap.c
@@ -35,22 +35,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/hineybush/h87a/keymaps/gam3cat/keymap.c b/keyboards/hineybush/h87a/keymaps/gam3cat/keymap.c
index 2a4e5ca41..fde263715 100644
--- a/keyboards/hineybush/h87a/keymaps/gam3cat/keymap.c
+++ b/keyboards/hineybush/h87a/keymaps/gam3cat/keymap.c
@@ -12,10 +12,10 @@ enum layers {
};
enum custom_keycodes {
- DYNAMIC_MACRO_RANGE = SAFE_RANGE,
- QMK_REV,
+ QMK_REV = SAFE_RANGE,
KC_WEB,
- KC_SP4
+ KC_SP4,
+ DYNAMIC_MACRO_RANGE
};
extern backlight_config_t backlight_config;
@@ -259,11 +259,11 @@ uint32_t layer_state_set_user(uint32_t state) {
break;
case _FL:
custom_backlight_level(2);
- rgblight_sethsv_noeeprom(280,255,255);
+ rgblight_sethsv_noeeprom(240,255,255);
break;
case _AL:
custom_backlight_level(3);
- rgblight_sethsv_noeeprom(350,255,255);
+ rgblight_sethsv_noeeprom(255,255,255);
break;
default:
custom_backlight_level(0);
diff --git a/keyboards/hineybush/h87a/rules.mk b/keyboards/hineybush/h87a/rules.mk
index dac21d72c..50aac07ad 100644
--- a/keyboards/hineybush/h87a/rules.mk
+++ b/keyboards/hineybush/h87a/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -67,4 +66,4 @@ 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
-EXTRAFLAGS += -flto \ No newline at end of file
+EXTRAFLAGS += -flto
diff --git a/keyboards/hineybush/hineyg80/rules.mk b/keyboards/hineybush/hineyg80/rules.mk
index 383a3594b..bc370be03 100644
--- a/keyboards/hineybush/hineyg80/rules.mk
+++ b/keyboards/hineybush/hineyg80/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/honeycomb/rules.mk b/keyboards/honeycomb/rules.mk
index 90992bad7..73a6fb6f7 100755
--- a/keyboards/honeycomb/rules.mk
+++ b/keyboards/honeycomb/rules.mk
@@ -3,7 +3,6 @@ SRC += matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/hs60/v1/rules.mk b/keyboards/hs60/v1/rules.mk
index 29e91aa24..20a2dc7a7 100644
--- a/keyboards/hs60/v1/rules.mk
+++ b/keyboards/hs60/v1/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# project specific files
@@ -68,8 +67,9 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
RGB_MATRIX_ENABLE = yes # Use RGB matrix
+RAW_ENABLE = yes
-LAYOUTS = 60_ansi 60_iso
+LAYOUTS = 60_ansi_split_bs_rshift
# Experimental features for zealcmd please do no enable
#RAW_ENABLE = yes
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json b/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
index 95122075b..19c078046 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
+++ b/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
@@ -101,7 +101,7 @@
},
"",
"UP",
- "",
+ "PrtScr",
"H",
"J",
"K",
@@ -182,9 +182,9 @@
"c": "#cccccc",
"t": "#000000"
},
- "",
- "",
- "",
- "PrtScr"
+ "Left",
+ "Down",
+ "Up",
+ "Right"
]
] \ No newline at end of file
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/keymap.c b/keyboards/idobo/keymaps/greenshadowmaker/keymap.c
index e96459da5..d23bc7c7d 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/keymap.c
+++ b/keyboards/idobo/keymaps/greenshadowmaker/keymap.c
@@ -1,40 +1,38 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
-
-#define _QWERTY 0
-#define _LOWER 1
-#define _RAISE 2
-#define _ADJUST 16
-
enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
+ LOWER = SAFE_RANGE,
RAISE,
- ADJUST,
+};
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY
* .--------------------------------------------------------------------------------------------------------------------------------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * | ESC | 1 | 2 | 3 | 4 | 5 | = | | - | 6 | 7 | 8 | 9 | 0 | BACKSP |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
* | TAB | Q | W | E | R | T | | | [ | Y | U | I | O | P | ] |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
- * | RAISE | A | S | D | F | G | | UP | | H | J | K | L | ; | ' |
+ * | RAISE | A | S | D | F | G | | UP | PrtScr | H | J | K | L | ; | ' |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
* | LSHIFT | Z | X | C | V | B | LEFT | DOWN | RIGHT | N | M | , | . | / | RSHIFT |
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | ` | \ | LALT | LCTRL | LOWER | SPACE | LGUI | DEL | ENTER | SPACE | RAISE | | | | PrtScr |
+ * | ` | \ | LALT | LCTRL | LOWER | SPACE | LGUI | DEL | ENTER | SPACE | RAISE | LEFT | DOWN | UP | RIGHT |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_ortho_5x15( \
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, XXXXXXX, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, \
- RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, KC_UP, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LEFT, KC_DOWN, KC_RGHT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- KC_GRAVE, KC_GRAVE, KC_LALT, KC_LCTL, LOWER, KC_SPC, KC_LGUI, KC_DEL, KC_ENT, KC_SPC, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR \
+[_QWERTY] = LAYOUT_ortho_5x15(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, XXXXXXX, KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, XXXXXXX, KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC,
+ RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, KC_UP, KC_PSCR, 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_LEFT, KC_DOWN, KC_RGHT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_GRAVE, KC_BSLS, KC_LALT, KC_LCTL, LOWER, KC_SPC, KC_LGUI, KC_DEL, KC_ENT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
@@ -51,12 +49,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | LOWER | | APP | | | | RAISE | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_ortho_5x15( \
- XXXXXXX, KC_F1, KC_F2, KC_F3, XXXXXXX, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, \
- XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- RAISE, KC_LEFT, KC_DOWN, KC_RGHT, 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, LOWER, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+[_LOWER] = LAYOUT_ortho_5x15(
+ XXXXXXX, KC_F1, KC_F2, KC_F3, XXXXXXX, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RAISE, KC_LEFT, KC_DOWN, KC_RGHT, 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, LOWER, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
/* RAISE
@@ -72,12 +70,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | LOWER | | | | | | RAISE | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_ortho_5x15( \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- RAISE, KC_HOME, KC_PGDN, KC_END, 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, LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+[_RAISE] = LAYOUT_ortho_5x15(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RAISE, KC_HOME, KC_PGDN, KC_END, 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, LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
@@ -94,12 +92,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | LOWER | | | | | | RAISE | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_ortho_5x15( \
- RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_M_P, RGB_M_T, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- RAISE, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, BL_INC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- EEP_RST, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+[_ADJUST] = LAYOUT_ortho_5x15(
+ RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_M_P, RGB_M_T, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ RAISE, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, BL_INC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ EEP_RST, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
@@ -116,7 +114,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
- break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
@@ -126,15 +123,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
- break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
}
return true;
}
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/readme.md b/keyboards/idobo/keymaps/greenshadowmaker/readme.md
index bdd28d4ff..7b6f654c7 100644
--- a/keyboards/idobo/keymaps/greenshadowmaker/readme.md
+++ b/keyboards/idobo/keymaps/greenshadowmaker/readme.md
@@ -1,3 +1,5 @@
# GreenShadowMaker keymap for idobo
+make idobo:greenshadowmaker:dfu
+
Note: keyboard-layout-editor-gsm-idobo.json shoudl be the matching layout for http://www.keyboard-layout-editor.com
diff --git a/keyboards/idobo/rules.mk b/keyboards/idobo/rules.mk
index 721a2ef9b..a5a86cc6a 100644
--- a/keyboards/idobo/rules.mk
+++ b/keyboards/idobo/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/ivy/config.h b/keyboards/ivy/config.h
new file mode 100644
index 000000000..1e6f5bc96
--- /dev/null
+++ b/keyboards/ivy/config.h
@@ -0,0 +1,67 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1337
+#define PRODUCT_ID 0x6012
+#define MANUFACTURER Maple Computing
+#define PRODUCT Ivy
+#define DESCRIPTION A 3 key macro pad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define BACKLIGHT_PIN D2
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/*
+ * 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/ivy/ivy.c b/keyboards/ivy/ivy.c
new file mode 100644
index 000000000..007ef6725
--- /dev/null
+++ b/keyboards/ivy/ivy.c
@@ -0,0 +1 @@
+#include "ivy.h"
diff --git a/keyboards/ivy/ivy.h b/keyboards/ivy/ivy.h
new file mode 100644
index 000000000..2cba5f495
--- /dev/null
+++ b/keyboards/ivy/ivy.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#ifdef KEYBOARD_ivy_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
diff --git a/keyboards/ivy/keymaps/default/keymap.c b/keyboards/ivy/keymaps/default/keymap.c
new file mode 100644
index 000000000..9a95ba820
--- /dev/null
+++ b/keyboards/ivy/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+#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.
+
+enum pad_layers {
+ _L1,
+ _FUNC
+};
+
+// Defines for task manager and such
+#define CALTDEL LCTL(LALT(KC_DEL))
+#define TSKMGR LCTL(LSFT(KC_ESC))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Layer 1
+ * ,------.
+ * | 1 |
+ * |------|
+ * | 2 |
+ * |------|
+ * | FN |
+ * `------'
+ */
+[_L1] = LAYOUT( \
+ KC_1, \
+ KC_2, \
+ MO(_FUNC) \
+),
+
+[_FUNC] = LAYOUT( \
+ CALTDEL, \
+ TSKMGR, \
+ _______ \
+)
+
+};
+
+void matrix_init_user(void) {
+
+}
diff --git a/keyboards/ivy/keymaps/default/rules.mk b/keyboards/ivy/keymaps/default/rules.mk
new file mode 100644
index 000000000..cd169fbfd
--- /dev/null
+++ b/keyboards/ivy/keymaps/default/rules.mk
@@ -0,0 +1,22 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
diff --git a/keyboards/ivy/readme.md b/keyboards/ivy/readme.md
new file mode 100644
index 000000000..f70630b52
--- /dev/null
+++ b/keyboards/ivy/readme.md
@@ -0,0 +1,15 @@
+IVY
+===
+
+![Ivy](https://i.imgur.com/fnVQet6.jpg)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ivy/rev1:default
+
+Install examples:
+
+ make ivy/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/ivy/rev1/config.h b/keyboards/ivy/rev1/config.h
new file mode 100644
index 000000000..9b88b89e5
--- /dev/null
+++ b/keyboards/ivy/rev1/config.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define DEVICE_VER 0x0001
+
+/* Let's Macro V2 pin-out */
+#define MATRIX_ROW_PINS { F1, B2, D3 }
+#define MATRIX_COL_PINS { F5, B3, D5 }
+#define UNUSED_PINS
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/ivy/rev1/rev1.c b/keyboards/ivy/rev1/rev1.c
new file mode 100644
index 000000000..c099e32c4
--- /dev/null
+++ b/keyboards/ivy/rev1/rev1.c
@@ -0,0 +1,5 @@
+#include "ivy.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+};
diff --git a/keyboards/ivy/rev1/rev1.h b/keyboards/ivy/rev1/rev1.h
new file mode 100644
index 000000000..ac338368e
--- /dev/null
+++ b/keyboards/ivy/rev1/rev1.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "ivy.h"
+
+#define LAYOUT( \
+ K00, \
+ K01, \
+ K02 \
+ ) \
+ { \
+ { K00, KC_NO, KC_NO }, \
+ { KC_NO, K01, KC_NO }, \
+ { KC_NO, KC_NO, K02 }, \
+ }
diff --git a/keyboards/ivy/rev1/rules.mk b/keyboards/ivy/rev1/rules.mk
new file mode 100644
index 000000000..f4043e2b7
--- /dev/null
+++ b/keyboards/ivy/rev1/rules.mk
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = no
+AUDIO_ENABLE = no \ No newline at end of file
diff --git a/keyboards/ivy/rules.mk b/keyboards/ivy/rules.mk
new file mode 100644
index 000000000..b27739644
--- /dev/null
+++ b/keyboards/ivy/rules.mk
@@ -0,0 +1,66 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+DEFAULT_FOLDER = ivy/rev1
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c b/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c
index aa5709a37..2b13f63ed 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c
@@ -12,10 +12,10 @@ enum layers {
};
enum custom_keycodes {
- DYNAMIC_MACRO_RANGE = SAFE_RANGE,
- QMK_REV,
+ QMK_REV = SAFE_RANGE,
KC_WEB,
- KC_SP4
+ KC_SP4,
+ DYNAMIC_MACRO_RANGE
};
extern backlight_config_t backlight_config;
@@ -251,7 +251,7 @@ uint32_t layer_state_set_user(uint32_t state) {
break;
case _AL:
custom_backlight_level(3);
- rgblight_sethsv_noeeprom(350,255,255);
+ rgblight_sethsv_noeeprom(250,255,255);
break;
default:
custom_backlight_level(0);
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk b/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
index 4086c15d4..85b2b41a6 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
@@ -22,4 +22,3 @@ FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By defaul
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
-
diff --git a/keyboards/jc65/v32u4/rules.mk b/keyboards/jc65/v32u4/rules.mk
index c2c02b614..cc905fb18 100644
--- a/keyboards/jc65/v32u4/rules.mk
+++ b/keyboards/jc65/v32u4/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/jd40/rules.mk b/keyboards/jd40/rules.mk
index 2bce6d2a2..5fc0a45e4 100644
--- a/keyboards/jd40/rules.mk
+++ b/keyboards/jd40/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -66,4 +63,4 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable RGB Underglow \ No newline at end of file
+RGBLIGHT_ENABLE = yes # Enable RGB Underglow
diff --git a/keyboards/jd45/rules.mk b/keyboards/jd45/rules.mk
index fe8354e95..e7ccb6325 100644
--- a/keyboards/jd45/rules.mk
+++ b/keyboards/jd45/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -64,4 +61,4 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
-BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file
+BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/kagamidget/config.h b/keyboards/kagamidget/config.h
index 00e09530e..7fe67ffd3 100644
--- a/keyboards/kagamidget/config.h
+++ b/keyboards/kagamidget/config.h
@@ -107,11 +107,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-/* 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
diff --git a/keyboards/kagamidget/rules.mk b/keyboards/kagamidget/rules.mk
index 50608d985..e7445a6fa 100644
--- a/keyboards/kagamidget/rules.mk
+++ b/keyboards/kagamidget/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -80,4 +79,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
-RGBLIGHT_ENABLE = yes \ No newline at end of file
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/katana60/keymaps/default/keymap.c b/keyboards/katana60/keymaps/default/keymap.c
index 04ea6fbc6..3e7e2191f 100644
--- a/keyboards/katana60/keymaps/default/keymap.c
+++ b/keyboards/katana60/keymaps/default/keymap.c
@@ -64,22 +64,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/katana60/rules.mk b/keyboards/katana60/rules.mk
index ca2a2a5f8..d4ed1d08d 100644
--- a/keyboards/katana60/rules.mk
+++ b/keyboards/katana60/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kbdfans/kbd4x/rules.mk b/keyboards/kbdfans/kbd4x/rules.mk
index 639546d6c..7e9ea7912 100644
--- a/keyboards/kbdfans/kbd4x/rules.mk
+++ b/keyboards/kbdfans/kbd4x/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kbdfans/kbd66/keymaps/ansi/keymap.c b/keyboards/kbdfans/kbd66/keymaps/ansi/keymap.c
index d73e5aec8..984d68971 100644
--- a/keyboards/kbdfans/kbd66/keymaps/ansi/keymap.c
+++ b/keyboards/kbdfans/kbd66/keymaps/ansi/keymap.c
@@ -66,22 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kbdfans/kbd66/keymaps/default/keymap.c b/keyboards/kbdfans/kbd66/keymaps/default/keymap.c
index a969d6510..60ef36390 100644
--- a/keyboards/kbdfans/kbd66/keymaps/default/keymap.c
+++ b/keyboards/kbdfans/kbd66/keymaps/default/keymap.c
@@ -66,22 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kbdfans/kbd66/keymaps/iso/keymap.c b/keyboards/kbdfans/kbd66/keymaps/iso/keymap.c
index 5ee64e352..b330abaf9 100644
--- a/keyboards/kbdfans/kbd66/keymaps/iso/keymap.c
+++ b/keyboards/kbdfans/kbd66/keymaps/iso/keymap.c
@@ -66,22 +66,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kbdfans/kbd66/rules.mk b/keyboards/kbdfans/kbd66/rules.mk
index 764bdf424..ffefc4bc8 100644
--- a/keyboards/kbdfans/kbd66/rules.mk
+++ b/keyboards/kbdfans/kbd66/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/config.h b/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/config.h
new file mode 100644
index 000000000..16497ddf0
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/config.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
+
+#define NO_ACTION_FUNCTION
+#define NO_ACTION_MACRO
+#define NO_ACTION_ONESHOT
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+#define TAP_HOLD_CAPS_DELAY 50
diff --git a/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c b/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c
new file mode 100644
index 000000000..7e36eb783
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c
@@ -0,0 +1,79 @@
+#include QMK_KEYBOARD_H
+
+#define FN MO(L_FN)
+#define FN_CAPS LT(L_FN, KC_CAPS)
+#define FN_ESC LT(L_FN, KC_ESC)
+#define FN_FNLK TT(L_FN)
+
+#define MV_UP LCTL(KC_UP)
+#define MV_DOWN LCTL(KC_DOWN)
+#define MV_LEFT LCTL(KC_LEFT)
+#define MV_RGHT LCTL(KC_RGHT)
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+
+enum keycodes {
+ CLEAR = SAFE_RANGE,
+};
+
+enum layers {
+ L_BASE,
+ L_FN,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case CLEAR:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │PSc│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │FnEsc │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │PgD│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │LCtl│LGui│LAlt│ Space │RAlt│FnLk│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_BASE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PSCR, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \
+ FN_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* Function layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│NLk│SLk│Pau│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ │M2 │M↑ │M1 │M3 │ │ │ │ │Stp│Ply│Prv│Nxt│Clear│Ins│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │M← │M↓ │M→ │MW↑│ │ │Mv←│ ↓ │ ↑ │Mv→│ │ │Top│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│Mut│ │PgU│Btm│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │DtPR│DtNA│ MW↓ │ │ │ │Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_FN] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NLCK, KC_SLCK, KC_PAUS, \
+ _______, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, _______, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS, \
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, MV_LEFT, KC_DOWN, KC_UP, MV_RGHT, _______, _______, _______, TOP, \
+ _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, BOTTOM, \
+ _______, _______, _______, KC_WH_D, _______, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+};
diff --git a/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/rules.mk b/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/rules.mk
new file mode 100644
index 000000000..16eb6cb44
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/rules.mk
@@ -0,0 +1,6 @@
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h
new file mode 100644
index 000000000..4f5147e66
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#undef MANUFACTURER
+#undef PRODUCT
+#undef DESCRIPTION
+
+#define MANUFACTURER Potato Inc.
+#define PRODUCT Qt3.14
+#define DESCRIPTION Look, a keyboard!
+
+/* send tap key if no layer key was used even after tap delay */
+#define TAPPING_TERM 50
+#define RETRO_TAPPING
+
+/* turn off RGB when computer sleeps */
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_SLEEP
+#endif \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/keymap.c b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/keymap.c
new file mode 100644
index 000000000..7c6ef155b
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/keymap.c
@@ -0,0 +1,90 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _FUNC,
+ _NUM
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Keymap (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |ENu| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |Del |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| {| }| Ent |PgUp|
+ * |------------------------------------------------------. |----|
+ * |CapsFn| A| S| D| F| G| H| J| K| L| ;| '| #| |PgDn|
+ * |----------------------------------------------------------------|
+ * |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift |Up |Fn |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt |Ctrl| |Lef|Dow|Rig |
+ * `------------------------------------------------' `------------'
+ */
+ [_QWERTY] = LAYOUT_all(
+ LT(_NUM,KC_ESC),KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ LT(_FUNC,KC_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_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, MO(_FUNC),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap Fn Layer
+ * ,----------------------------------------------------------------.
+ * | ` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |Ins |
+ * |----------------------------------------------------------------|
+ * | |TOG|M+ |H+ |S+ |V+ |Sp+| |Prt|SLk|Pau| | | |Home|
+ * |------------------------------------------------------. |----|
+ * | |VLK|M- |H- |S- |V+ |Sp-| | | | | | | |End |
+ * |----------------------------------------------------------------|
+ * | |BL |BL-|BL+|BRTG| | | | | | | |PUp| |
+ * |----------------------------------------------------------------|
+ * |Sleep|Reset| | C+A+D |C+A+I|Menu| |Hom|PDn|End |
+ * `------------------------------------------------' `------------'
+ */
+ [_FUNC] = 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,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______, KC_HOME,
+ _______, VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD,_______,_______,_______,_______,_______, _______, KC_END,
+ _______,_______,BL_TOGG, BL_DEC, BL_INC, BL_BRTG,_______,_______,_______,_______,_______,_______,_______, KC_PGUP,_______,
+ KC_SLEP,RESET ,_______, LCA(KC_DEL), LCA(KC_DEL), LCA(KC_DEL), LCA(KC_INS),KC_APP, _______,KC_HOME,KC_PGDN,KC_END),
+
+ /* Keymap Numpad Layer
+ * ,----------------------------------------------------------------.
+ * | | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| /| | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | 4| 5| 6| *| | | | |
+ * |------------------------------------------------------. |----|
+ * | | | | | | | | 1| 2| 3| -| | | | |
+ * |----------------------------------------------------------------|
+ * | | |NLk| | | | | | 0| | | +| | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------------------------------------------------' `------------'
+ */
+ [_NUM] = LAYOUT_all(
+ _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, KC_KP_SLASH, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_ASTERISK, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_MINUS, _______, _______, _______,
+ _______, _______, KC_NLCK, _______, _______, _______, _______, _______, KC_KP_0, _______, _______, KC_KP_PLUS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______),
+ };
+
+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) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ rgblight_enable_noeeprom();
+ } else {
+ rgblight_disable_noeeprom();
+ }
+}
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/readme.md b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/readme.md
new file mode 100644
index 000000000..1404ceed5
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/readme.md
@@ -0,0 +1,9 @@
+# TuCZnak's modified layout
+
+This layout is made for the ISO configuration of KBD67 (KBD65 v2 PCB).
+It has a base layer, numpad on LT and a combined
+configuration / macro / media layer.
+
+Since the plate and PCB leak some underglow and the KBD67 case has no use
+for it otherwise, containing no translucent parts, I've used the RGB OLEDs
+as a capslock indicator.
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/rules.mk b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/rules.mk
new file mode 100644
index 000000000..277af2b17
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/rules.mk
@@ -0,0 +1,20 @@
+# 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
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality 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)
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c b/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
index bb8ab6b9b..b348b0b7b 100644
--- a/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
+++ b/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
@@ -10,6 +10,7 @@ enum layers_keymap {
};
void eeconfig_init_keymap(void) {
+ rgblight_sethsv(MODERN_DOLCH_RED.h, MODERN_DOLCH_RED.s, MODERN_DOLCH_RED.v);
rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL);
}
@@ -56,20 +57,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
- * │ │Hom│ ↑ │End│PgU│ │ │ │ │M1 │M↑ │M3 │M2 │ Del │
+ * │ │Hom│ ↑ │End│PgU│ │ │ │ │M3 │M1 │M↑ │M2 │ Del │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │ │ ← │ ↓ │ → │PgD│ │ │ │MW↑│M← │M↓ │M→ │ │
+ * │ │ ← │ ↓ │ → │PgD│ │ │ │ │MW↑│M← │M→ │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
- * │ │Mut│Vo-│Vo+│Ply│Prv│Nxt│MW←│MW→│M4 │M5 │ │ │
+ * │ │Mut│Vo-│Vo+│Ply│Prv│Nxt│App│MW←│MW→│M↓ │ │ │
* └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
* │ │ │ MW↓ │MAcl2│ │
* └───┴─────┴───────────────────────────┴─────┴───┘
*/
[L_FN] = LAYOUT(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_INS,
- _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN3, KC_BTN2, KC_DEL,
- _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______,
- _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_WH_L, KC_WH_R, KC_BTN4, KC_BTN5, _______, _______,
+ _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, KC_BTN3, KC_BTN1, KC_MS_U, KC_BTN2, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, KC_WH_U, KC_MS_L, KC_MS_R, _______,
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_APP, KC_WH_L, KC_WH_R, KC_MS_D, _______, _______,
XXXXXXX, _______, _______, KC_WH_D, KC_ACL2, _______, XXXXXXX
),
@@ -81,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │Mv←│Mv↓│Mv→│TNx│ │ │ │ │ │ │ │ │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
- * │ │RTg│RV-│RV+│ │ │ │ │ │ │ │ │ │
+ * │ │RTg│RV-│RV+│RMd│ │ │ │M4 │M5 │ │ │ │
* └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
* │DPR│DstNA│ │ │ │
* └───┴─────┴───────────────────────────┴─────┴───┘
@@ -90,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLEAR,
_______, TOP, MV_UP, BOTTOM, TAB_PRV, _______, _______, _______, _______, _______, _______, _______, _______, DEL_NXT,
_______, MV_LEFT, MV_DOWN, MV_RGHT, TAB_NXT, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_VAD, RGB_VAI, RGB_MOD, _______, _______, _______, KC_BTN4, KC_BTN5, _______, _______, _______,
XXXXXXX, DST_P_R, DST_N_A, _______, _______, _______, XXXXXXX
),
};
diff --git a/keyboards/kbdfans/kbd6x/rules.mk b/keyboards/kbdfans/kbd6x/rules.mk
index e9b61a76d..72c52d3c6 100644
--- a/keyboards/kbdfans/kbd6x/rules.mk
+++ b/keyboards/kbdfans/kbd6x/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h b/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h
new file mode 100644
index 000000000..54960f7d1
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#undef MANUFACTURER
+#undef PRODUCT
+#undef DESCRIPTION
+
+#define MANUFACTURER Potato Inc.
+#define PRODUCT Qt3.14
+#define DESCRIPTION Look, a keyboard!
+
+/* send tap key if no layer key was used even after tap delay */
+#define TAPPING_TERM 250
+#define RETRO_TAPPING
+
+/* turn off RGB when computer sleeps */
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_SLEEP
+#endif
+
+/* number of backlight levels */
+#ifdef BACKLIGHT_LEVELS
+#undef BACKLIGHT_LEVELS
+#endif
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 8
+#endif
diff --git a/keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c b/keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c
new file mode 100644
index 000000000..ad3b6f6c5
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c
@@ -0,0 +1,90 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _FUNC,
+ _NUMPAD
+};
+
+enum keycodes {
+ QWERTY = SAFE_RANGE,
+ FUNC,
+ NUMPAD,
+ MACRO1,
+ MACRO2,
+ MACROTAB,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_ansi_1u(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_PSCR,
+ LT(_NUMPAD, KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNC), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FUNC] = LAYOUT_ansi_1u(
+ RESET, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLCK, KC_PAUS,
+ KC_TRNS, MACRO1, MACRO2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ MACROTAB, 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_NUBS, KC_TRNS,
+ KC_TRNS, VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, DYN_REC_START2, DYN_MACRO_PLAY2, KC_TRNS, KC_TRNS,
+ KC_TRNS, BL_TOGG, BL_DEC, BL_INC, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, DYN_REC_STOP, DYN_REC_START1, DYN_MACRO_PLAY1, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, LCA(KC_DEL), KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [_NUMPAD] = LAYOUT_ansi_1u(
+ KC_NUMLOCK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, KC_KP_SLASH, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_ASTERISK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_MINUS, KC_TRNS, KC_KP_ENTER, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, KC_COMM, KC_DOT, KC_KP_PLUS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case MACRO1:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("c") SS_DOWN(X_LALT) SS_TAP(X_TAB) SS_UP(X_LALT) SS_LCTRL("v") SS_TAP(X_TAB));
+ _delay_ms(50);
+ SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_TAB) SS_UP(X_LALT) SS_TAP(X_TAB));
+ } else {
+
+ }
+ break;
+ case MACRO2:
+ if (record->event.pressed) {
+ SEND_STRING("GGWP");
+ } else {
+
+ }
+ break;
+ case MACROTAB:
+ if (record->event.pressed) {
+ SEND_STRING(" ");
+ } else {
+
+ }
+ break;
+ }
+
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ setPinOutput(B2);
+ writePinLow(B2);
+ } else {
+ setPinInput(B2);
+ writePinLow(B2);
+ }
+}
diff --git a/keyboards/kbdfans/kbd75/keymaps/tucznak/readme.md b/keyboards/kbdfans/kbd75/keymaps/tucznak/readme.md
new file mode 100644
index 000000000..962125844
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/tucznak/readme.md
@@ -0,0 +1,5 @@
+# TuCZnak's modified layout
+
+This layout is made for the ANSI configuration of KBD75.
+It has a base layer, numpad on LT and a combined
+configuration / macro / media layer.
diff --git a/keyboards/kbdfans/kbd75/keymaps/tucznak/rules.mk b/keyboards/kbdfans/kbd75/keymaps/tucznak/rules.mk
new file mode 100644
index 000000000..7d6400f97
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/tucznak/rules.mk
@@ -0,0 +1,14 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+VELOCIKEY_ENABLE = yes # RGB memes for quickscoping teens
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/kbdfans/kbd8x/keymaps/default/keymap.c b/keyboards/kbdfans/kbd8x/keymaps/default/keymap.c
index a7dcd5518..6d87bc889 100644
--- a/keyboards/kbdfans/kbd8x/keymaps/default/keymap.c
+++ b/keyboards/kbdfans/kbd8x/keymaps/default/keymap.c
@@ -35,22 +35,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kbdfans/kbd8x/keymaps/default_backlighting/keymap.c b/keyboards/kbdfans/kbd8x/keymaps/default_backlighting/keymap.c
index e664575d5..69b09d0a0 100644
--- a/keyboards/kbdfans/kbd8x/keymaps/default_backlighting/keymap.c
+++ b/keyboards/kbdfans/kbd8x/keymaps/default_backlighting/keymap.c
@@ -34,22 +34,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kbdfans/kbd8x/rules.mk b/keyboards/kbdfans/kbd8x/rules.mk
index be7577564..f6ed7729c 100644
--- a/keyboards/kbdfans/kbd8x/rules.mk
+++ b/keyboards/kbdfans/kbd8x/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kc60/keymaps/default/keymap.c b/keyboards/kc60/keymaps/default/keymap.c
index 073ae9c4a..a96b9d377 100644
--- a/keyboards/kc60/keymaps/default/keymap.c
+++ b/keyboards/kc60/keymaps/default/keymap.c
@@ -10,9 +10,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, RESET \
),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- return MACRO_NONE;
-};
diff --git a/keyboards/kc60/rules.mk b/keyboards/kc60/rules.mk
index e4f590b1b..05cfe88da 100644
--- a/keyboards/kc60/rules.mk
+++ b/keyboards/kc60/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -67,4 +66,4 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
-LAYOUTS = 60_ansi \ No newline at end of file
+LAYOUTS = 60_ansi
diff --git a/keyboards/kc60se/rules.mk b/keyboards/kc60se/rules.mk
index c32a9b610..f090f3ecb 100644
--- a/keyboards/kc60se/rules.mk
+++ b/keyboards/kc60se/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/keebio/bdn9/config.h b/keyboards/keebio/bdn9/config.h
index 19e625348..641dc5736 100644
--- a/keyboards/keebio/bdn9/config.h
+++ b/keyboards/keebio/bdn9/config.h
@@ -38,7 +38,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ E6, B4, B2 } \
}
-#define NUMBER_OF_ENCODERS 2
#define ENCODERS_PAD_A { D1, F5 }
#define ENCODERS_PAD_B { D0, F6 }
diff --git a/keyboards/keebio/bfo9000/rules.mk b/keyboards/keebio/bfo9000/rules.mk
index 3ebe39a90..931a0f5e9 100644
--- a/keyboards/keebio/bfo9000/rules.mk
+++ b/keyboards/keebio/bfo9000/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/winkeyless/bface/i2c.h b/keyboards/keebio/iris/keymaps/jasonkrasavage/config.h
index 27c9d3d05..751acc643 100644
--- a/keyboards/winkeyless/bface/i2c.h
+++ b/keyboards/keebio/iris/keymaps/jasonkrasavage/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright 2017 Danny Nguyen <danny@keeb.io>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,11 +15,11 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __I2C_H__
-#define __I2C_H__
+#pragma once
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+// #define USE_I2C
+#define EE_HANDS
-#endif
+#undef RGBLED_NUM
+
+#define RGBLED_NUM 12 \ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/jasonkrasavage/keymap.c b/keyboards/keebio/iris/keymaps/jasonkrasavage/keymap.c
new file mode 100644
index 000000000..6901d6db8
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jasonkrasavage/keymap.c
@@ -0,0 +1,44 @@
+#include QMK_KEYBOARD_H
+
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+
+
+
+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_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CAPSLOCK, 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_LBRACKET, KC_RBRACKET, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LALT, KC_LGUI, KC_ENT, MO(_LOWER), KC_SPC, KC_RALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_LPRN, _______, _______, KC_RPRN, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
diff --git a/keyboards/keebio/iris/keymaps/jasonkrasavage/rules.mk b/keyboards/keebio/iris/keymaps/jasonkrasavage/rules.mk
new file mode 100644
index 000000000..7ad666d1a
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/jasonkrasavage/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/mattly/config.h b/keyboards/keebio/iris/keymaps/mattly/config.h
new file mode 100644
index 000000000..01bb31a6e
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/mattly/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+// #define USE_I2C
+#define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/keebio/iris/keymaps/mattly/keymap.c b/keyboards/keebio/iris/keymaps/mattly/keymap.c
new file mode 100644
index 000000000..4f4ff225e
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/mattly/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+#include "mattly.h"
+
+// extern keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SCLN,
+ KC_CAPS, A_CTRL, S_ALT, D_GUI, F_SHFT, KC_G, KC_H, J_SHFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
+ XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, SPC_SFT, BSP_NUM, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ ESC_HYP, BSP_NUM, ENT_SFT, SPC_SFT, TAB_SYM, DEL_WRP
+ ),
+
+ [_SYMBOL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_AMPR, KC_GRV, KC_TILD, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_PLUS, KC_ASTR, XXXXXXX, _______,
+ _______, KC_DLR, KC_PERC, KC_EQL, KC_LPRN, KC_RPRN, KC_SCLN, KC_COLN, KC_EXLM, KC_AT, KC_UNDS, _______,
+ RESET, XXXXXXX, KC_CIRC, KC_HASH, KC_LCBR, KC_RCBR, _______, _______, KC_QUOT, KC_DQUO, KC_PIPE, KC_BSLS, KC_QUES, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_NAVNUM] = LAYOUT(
+ XNOTIFY, XXXXXXX, XPRVSPC, NWIN, XNXTSPC, XXXXXXX, XXXXXXX, KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, XXXXXXX,
+ XALLWIN, NAVFWD, BWORD, KC_UP, FWORD, KC_PGUP, KC_DLR, KC_P7, KC_P8, KC_P9, KC_DOT, XXXXXXX,
+ XDESKTP, NAVBACK, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_PERC, KC_P4, KC_P5, KC_P6, KC_EQL, XXXXXXX,
+ RESET, PTAB, KC_HOME, PWIN, KC_END, NTAB, _______, _______, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_ENT, XXXXXXX,
+ _______, _______, _______, _______, _______, KC_P0
+ ),
+
+ [_FUNCT] = 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,
+ RESET, XALLWIN, XPRVSPC, NWIN, XNXTSPC, XDESKTP, XXXXXXX, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_K, RESET,
+ DEBUG, XNOTIFY, PTAB, PWIN, NTAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______, _______
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_MS_WH_UP);
+ } else {
+ tap_code(KC_MS_WH_DOWN);
+ }
+ }
+}
+
diff --git a/keyboards/keebio/iris/keymaps/mattly/readme.md b/keyboards/keebio/iris/keymaps/mattly/readme.md
new file mode 100644
index 000000000..4e8c7f17c
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/mattly/readme.md
@@ -0,0 +1 @@
+See my readme in [users/mattly](../../../../../users/mattly/readme.md) \ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/mattly/rules.mk b/keyboards/keebio/iris/keymaps/mattly/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/mattly/rules.mk
diff --git a/keyboards/keebio/iris/keymaps/osiris/config.h b/keyboards/keebio/iris/keymaps/osiris/config.h
new file mode 100644
index 000000000..45d92578c
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/osiris/config.h
@@ -0,0 +1,33 @@
+/*
+Copyright 2019 Khader Syed
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define USE_I2C
+#define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+// #undef PERMISSIVE_HOLD
+//#define TAPPING_FORCE_HOLD
+//#define RETRO_TAPPING
+#define PERMISSIVE_HOLD \ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/osiris/keymap.c b/keyboards/keebio/iris/keymaps/osiris/keymap.c
new file mode 100644
index 000000000..4bf65dd6e
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/osiris/keymap.c
@@ -0,0 +1,141 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum layer_names {
+ _QWERTY,
+ _WORKMAN,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ WORKMAN,
+ LOWER,
+ RAISE
+};
+
+#define KC_ KC_TRNS
+
+#define KC_LOWR LOWER
+#define KC_RASE RAISE
+#define KC_RST RESET
+#define KC_BL_S BL_STEP
+
+// left control as a left key too - makes perfect sense
+#define KC_LECL LCTL_T(KC_LEFT)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ GESC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LECL, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,RGHT,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ LGUI,LOWR,ENT , SPC ,RASE,RALT
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_WORKMAN] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ GESC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , D , R , W , B , J , F , U , P ,SCLN,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, A , S , H , T , G , Y , N , E , O ,I ,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LECL, Z , X , M , C , V ,LBRC, RBRC, K , L ,COMM,DOT ,SLSH,RGHT,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ LGUI,LOWR,ENT , SPC ,RASE,RALT
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,DEL ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , ,BTN1, , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , MS_L,MS_D,MS_U,MS_R, , ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , , , , , UP , , , , , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+
+),
+ [_RAISE] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , ,VOLU, , ,LBRC, RBRC,UNDS,PLUS, , ,MUTE,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,MPLY,VOLD,MNXT, ,LPRN, RPRN,MINS,EQL , , , ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , , , , , , , ,DOWN, , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, _______, QWERTY, WORKMAN, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RESET , DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------' `--------+--------+--------'
+ )
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/iris/keymaps/osiris/readme.md b/keyboards/keebio/iris/keymaps/osiris/readme.md
new file mode 100644
index 000000000..7db30591e
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/osiris/readme.md
@@ -0,0 +1,11 @@
+# My Iris Layout
+
+![My Iris Rev3](https://i.imgur.com/7oXacel.jpg)
+
+- mouse keys enabled
+- includes a QWERTY and a WORKMAN layout now
+- keys that I need, while removing keys that I don't
+- more updates with the layout coming soon
+ - the enter needs to move elsewhere, not yet sure where
+
+See keymap.c for layouts
diff --git a/keyboards/keebio/iris/keymaps/osiris/rules.mk b/keyboards/keebio/iris/keymaps/osiris/rules.mk
new file mode 100644
index 000000000..45c570a3b
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/osiris/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/keebio/iris/rev3/config.h b/keyboards/keebio/iris/rev3/config.h
index 720695b60..965362543 100644
--- a/keyboards/keebio/iris/rev3/config.h
+++ b/keyboards/keebio/iris/rev3/config.h
@@ -41,7 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define QMK_LED B0
#define QMK_SPEAKER C6
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B5 }
#define ENCODERS_PAD_B { B7 }
diff --git a/keyboards/keebio/iris/rules.mk b/keyboards/keebio/iris/rules.mk
index 18d1d6550..b0012e161 100644
--- a/keyboards/keebio/iris/rules.mk
+++ b/keyboards/keebio/iris/rules.mk
@@ -7,7 +7,7 @@ F_USB = $(F_CPU)
# 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.
-ifeq ($(strip $(KEYBOARD)), iris/rev3)
+ifneq (, $(findstring rev3, $(KEYBOARD)))
BOOTLOADER = qmk-dfu
else
BOOTLOADER = caterina
diff --git a/keyboards/keebio/laplace/rules.mk b/keyboards/keebio/laplace/rules.mk
index fe22161cb..7f896e1bd 100644
--- a/keyboards/keebio/laplace/rules.mk
+++ b/keyboards/keebio/laplace/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/keebio/nyquist/rules.mk b/keyboards/keebio/nyquist/rules.mk
index 51821a482..4ad4eddf9 100644
--- a/keyboards/keebio/nyquist/rules.mk
+++ b/keyboards/keebio/nyquist/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -38,8 +37,8 @@ F_USB = $(F_CPU)
# 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.
-ifeq ($(strip $(KEYBOARD)), nyquist/rev3)
- BOOTLOADER = dfu
+ifneq (, $(findstring rev3, $(KEYBOARD)))
+ BOOTLOADER = qmk-dfu
else
BOOTLOADER = caterina
endif
diff --git a/keyboards/keyhive/maypad/config.h b/keyboards/keyhive/maypad/config.h
new file mode 100644
index 000000000..4fce7ffa0
--- /dev/null
+++ b/keyboards/keyhive/maypad/config.h
@@ -0,0 +1,246 @@
+/*
+Copyright 2019 codybender
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should 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 KeyHive
+#define PRODUCT maypad
+#define DESCRIPTION Budget-friendly numpad
+
+/* 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 { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/keyhive/maypad/info.json b/keyboards/keyhive/maypad/info.json
new file mode 100644
index 000000000..547cc8b6e
--- /dev/null
+++ b/keyboards/keyhive/maypad/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "maypad",
+ "url": "https://keyhive.xyz/shop/may-pad",
+ "maintainer": "codybender",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":1, "h":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":3, "h":2}]
+ },
+ "LAYOUT_ortho_5x4": {
+ "layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"+", "x":3, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "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}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}]
+ }
+
+ }
+}
diff --git a/keyboards/keyhive/maypad/keymaps/default/config.h b/keyboards/keyhive/maypad/keymaps/default/config.h
new file mode 100644
index 000000000..867ac3066
--- /dev/null
+++ b/keyboards/keyhive/maypad/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 codybender
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/keyhive/maypad/keymaps/default/keymap.c b/keyboards/keyhive/maypad/keymaps/default/keymap.c
new file mode 100644
index 000000000..466a13f41
--- /dev/null
+++ b/keyboards/keyhive/maypad/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2019 codybender
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_numpad_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ ),
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/keyhive/maypad/keymaps/default/readme.md b/keyboards/keyhive/maypad/keymaps/default/readme.md
new file mode 100644
index 000000000..fbd112d92
--- /dev/null
+++ b/keyboards/keyhive/maypad/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for maypad \ No newline at end of file
diff --git a/keyboards/keyhive/maypad/maypad.c b/keyboards/keyhive/maypad/maypad.c
new file mode 100644
index 000000000..825d8c4a5
--- /dev/null
+++ b/keyboards/keyhive/maypad/maypad.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 codybender
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "maypad.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/keyhive/maypad/maypad.h b/keyboards/keyhive/maypad/maypad.h
new file mode 100644
index 000000000..42c71f416
--- /dev/null
+++ b/keyboards/keyhive/maypad/maypad.h
@@ -0,0 +1,61 @@
+/* Copyright 2019 codybender
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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"
+
+/* maypad numpad layout
+ * .-------------------.
+ * |NLCK| /| *| -|
+ * |-------------------|
+ * | 7| 8| 9| |
+ * |--------------| |
+ * | 4| 5| 6| +|
+ * |-------------------|
+ * | 1| 2| 3| |
+ * |--------------| |
+ * | 0| .| Ent|
+ * '-------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_numpad_5x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, \
+ k41, k42, k43 \
+) { \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, KC_NO }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, KC_NO }, \
+ { KC_NO, k41, k42, k43 } \
+}
+
+#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/keyhive/maypad/readme.md b/keyboards/keyhive/maypad/readme.md
new file mode 100644
index 000000000..3467827b6
--- /dev/null
+++ b/keyboards/keyhive/maypad/readme.md
@@ -0,0 +1,13 @@
+# KeyHive Maypad
+
+![Maypad Layout](https://i.imgur.com/B7WXcfy.png)
+
+A budget-friendly, exposed-component numpad from [KeyHive](https://www.keyhive.xyz)
+
+Keyboard Maintainer: [Cody Bender](https://github.com/codybender)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/maypad: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/keyhive/maypad/rules.mk b/keyboards/keyhive/maypad/rules.mk
new file mode 100644
index 000000000..d34236a16
--- /dev/null
+++ b/keyboards/keyhive/maypad/rules.mk
@@ -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 = 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 = ortho_5x4 numpad_5x4
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
index 98de455e5..dd85cdbe2 100644
--- a/keyboards/kinesis/keymaps/default/keymap.c
+++ b/keyboards/kinesis/keymaps/default/keymap.c
@@ -52,22 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kinesis/keymaps/default_pretty/keymap.c b/keyboards/kinesis/keymaps/default_pretty/keymap.c
index cb4cb6f26..3d2a538a2 100644
--- a/keyboards/kinesis/keymaps/default_pretty/keymap.c
+++ b/keyboards/kinesis/keymaps/default_pretty/keymap.c
@@ -45,22 +45,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kinesis/keymaps/tw1t611/keymap.c b/keyboards/kinesis/keymaps/tw1t611/keymap.c
index ceb9d5e7d..afeaf7711 100644
--- a/keyboards/kinesis/keymaps/tw1t611/keymap.c
+++ b/keyboards/kinesis/keymaps/tw1t611/keymap.c
@@ -8,38 +8,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[QWERTZ] = LAYOUT(
_______,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
_______,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
- KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
- KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
- DE_HASH,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
- DE_TILD,DE_PIPE,DE_BSLS,DE_GRV,
+ KC_ESC ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
+ KC_TAB ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
+ DE_PIPE,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
+ _______,_______,_______,_______,
KC_RCTL,KC_LALT,
KC_HOME,
- KC_LSFT,MO(MOD),KC_BSPC ,
+ KC_SPC ,KC_LSFT,KC_BSPC ,
KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR,KC_SLCK,KC_PAUS,KC_FN0 ,RESET,
- KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_AUDIO_MUTE,
- KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_EQL ,
- KC_H ,KC_J ,KC_K ,KC_L ,DE_SLSH,DE_QUOT,
- KC_N ,KC_M ,DE_COMM,DE_DOT ,DE_MINS,DE_PLUS,
- DE_AE ,DE_OE, DE_UE, DE_SS,
+ KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,DE_SS ,
+ KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,DE_AE ,
+ KC_H ,KC_J ,KC_K ,KC_L ,DE_SLSH,DE_OE ,
+ KC_N ,KC_M ,DE_COMM,DE_DOT ,DE_MINS,DE_UE ,
+ _______,_______,_______,_______,
KC_LGUI,KC_LCTL,
KC_END ,
- KC_DEL,KC_ENTER ,KC_SPC
+ KC_DEL,MO(MOD),KC_ENTER
),
[MOD] = LAYOUT(
_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______,_______,_______,_______,
- _______,DE_AT ,DE_EURO,DE_LBRC,DE_RBRC,_______,
- _______,DE_EXLM,DE_DLR ,DE_LPRN,DE_RPRN,_______,
- _______,DE_CIRC,DE_AMPR,DE_LCBR,DE_RCBR,_______,
- _______,_______,DE_LESS,DE_MORE,
+ DE_CIRC,DE_QUOT,DE_DQOT,DE_LCBR,DE_RCBR,DE_GRV ,
+ DE_TILD,DE_EXLM,DE_DLR ,DE_LPRN,DE_RPRN,DE_AMPR,
+ DE_BSLS,DE_HASH,DE_LESS,DE_LBRC,DE_RBRC,DE_MORE,
+ _______,_______,_______,_______,
_______,_______,
_______,
_______,_______,_______,
_______,_______,_______,_______,_______,_______,_______,_______,_______,
_______,_______,_______,_______,_______,_______,
- _______,KC_PGDOWN,KC_PGUP,_______,_______,DE_PERC,
- KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,DE_QST ,DE_DQOT,
- _______,_______,DE_SCLN,DE_COLN,DE_UNDS,DE_ASTR,
+ KC_HOME,KC_PGDN,KC_PGUP,KC_END ,DE_EQL ,DE_PERC,
+ KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,DE_QST ,DE_ASTR,
+ DE_AT ,DE_EURO,DE_SCLN,DE_COLN,DE_UNDS,DE_PLUS,
_______,_______,_______,_______,
_______,_______,
_______,
diff --git a/keyboards/kinesis/keymaps/tw1t611/readme.md b/keyboards/kinesis/keymaps/tw1t611/readme.md
index da033be1e..41b0caa7e 100644
--- a/keyboards/kinesis/keymaps/tw1t611/readme.md
+++ b/keyboards/kinesis/keymaps/tw1t611/readme.md
@@ -1 +1 @@
-# The default keymap for kinesis-advantage
+This is a german keymap for the Kinesis Advantage.
diff --git a/keyboards/kinesis/rules.mk b/keyboards/kinesis/rules.mk
index c8646449b..b3a6b84d6 100644
--- a/keyboards/kinesis/rules.mk
+++ b/keyboards/kinesis/rules.mk
@@ -5,7 +5,6 @@ SRC= matrix.c
# MCU name
MCU = at90usb1286
-#MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
@@ -72,4 +71,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output should be port E6, current quantum library hardcodes C6, which we use for programming
CUSTOM_MATRIX=yes # need to do our own thing with the matrix
-DEFAULT_FOLDER = kinesis/alvicstep \ No newline at end of file
+DEFAULT_FOLDER = kinesis/alvicstep
diff --git a/keyboards/kira75/keymaps/default/keymap.c b/keyboards/kira75/keymaps/default/keymap.c
index 7a08c4e50..74fa1ed84 100644
--- a/keyboards/kira75/keymaps/default/keymap.c
+++ b/keyboards/kira75/keymaps/default/keymap.c
@@ -26,22 +26,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kira75/rules.mk b/keyboards/kira75/rules.mk
index 610410ae4..218221092 100644
--- a/keyboards/kira75/rules.mk
+++ b/keyboards/kira75/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kmac/rules.mk b/keyboards/kmac/rules.mk
index dbcf540bd..33e5e43f7 100644
--- a/keyboards/kmac/rules.mk
+++ b/keyboards/kmac/rules.mk
@@ -2,7 +2,6 @@
SRC += matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c b/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c
index e35b8ec08..68c96fc19 100644
--- a/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c
+++ b/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c
@@ -1,5 +1,10 @@
#include QMK_KEYBOARD_H
+enum custom_keycodes {
+ M_TGLHF = SAFE_RANGE,
+ M_TGG
+};
+
/*
* Copy of knopps mini default May 16,2018
* Added comments in code to more easilly understand it.
@@ -41,16 +46,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* Layer 1
* _____ _____ _____
* | | | | | |
-* ESC Macro3 Macro4
+* ESC Ctl+Z CSf+Z
* |_____| |_____| |_____|
* _____ _____ _____
* | | | | | |
-* Macro5 Macro6 Macro7
+* Ctl+X Ctl+C Ctl+V
* |_____| |_____| |_____|
*
*/
LAYOUT(
- LT(3, KC_ESC), M(3), M(4), M(5), M(6), M(7)),
+ LT(3, KC_ESC), C(KC_Z), C(S(KC_Z)), C(KC_X), C(KC_C), C(KC_V)),
/*
* Layer 2
@@ -65,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*
*/
LAYOUT(
- LT(3, KC_1), KC_2, KC_3, KC_4, M(0), M(1)),
+ LT(3, KC_1), KC_2, KC_3, KC_4, M_TGLHF, M_TGG),
/*
* Layer 3 Key Layout
@@ -126,91 +131,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// Older way of Macros found here: https://docs.qmk.fm/features/macros
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- //keyevent_t event = record->event;
-
- switch (id) {
- case 0:
- if (record->event.pressed) {
- /*
- * This is Macro 0
- * Content: tglhf<enter>
- */
- return MACRO( T(T), T(G), T(L), T(H), T(F), T(ENT), END );
- }
- break;
- case 1:
- if (record->event.pressed) {
- /*
- * This is Macro 1
- * Content: tgg<enter>
- */
- return MACRO( T(T), T(G), T(G), T(ENT), END );
- }
- break;
- case 2:
- if (record->event.pressed) {
- /*
- * This is Macro 2
- * Content: Press and hold "no" , type "l", release "no"<enter>
- * I haven't found what this "NO" key maps to
- */
- return MACRO( D(NO), T(L), U(NO), END );
- }
- break;
- case 3:
- if (record->event.pressed) {
- /*
- * This is Macro 3
- * Content: press/hold LCTRL, type "2", release LCTRL
- */
- return MACRO( D(LCTL), T(Z), U(LCTL), END );
- }
- break;
- case 4:
- if (record->event.pressed) {
- /*
- * This is Macro 4
- * Content: press/hold LCTRL, type "2", release LCTRL
- */
- return MACRO( D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END );
- }
- break;
- case 5:
- if (record->event.pressed) {
- /*
- * This is Macro 5
- * Content: press/hold LCTRL, type "x", release LCTRL
- */
- return MACRO( D(LCTL), T(X), U(LCTL), END );
- }
- break;
- case 6:
- if (record->event.pressed) {
- /*
- * This is Macro 6
- * Content: press/hold LCTRL, type "c", release LCTRL
- */
- return MACRO( D(LCTL), T(C), U(LCTL), END );
- }
- break;
- case 7:
- if (record->event.pressed) {
- /*
- * This is Macro 7
- * Content: press/hold LCTRL, type "v", release LCTRL
- */
- return MACRO( D(LCTL), T(V), U(LCTL), END );
- }
- break;
- }
- return MACRO_NONE;
-}
-
-
-
void set_switch_led(int ledId, bool state) {
if(state) {
switch(ledId) {
@@ -480,6 +400,17 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) {
led_set_layer(2);
}
break;
+ case M_TGLHF:
+ if (record->event.pressed) {
+ SEND_STRING("tglhf");
+ tap_code(KC_ENT);
+ }
+ case M_TGG:
+ if (record->event.pressed) {
+ SEND_STRING("tgg");
+ tap_code(KC_ENT);
+ }
+ return false;
}
return true;
}
diff --git a/keyboards/knops/mini/keymaps/default/keymap.c b/keyboards/knops/mini/keymaps/default/keymap.c
index a5a701c88..859f07aa0 100644
--- a/keyboards/knops/mini/keymaps/default/keymap.c
+++ b/keyboards/knops/mini/keymaps/default/keymap.c
@@ -1,15 +1,20 @@
#include QMK_KEYBOARD_H
+enum custom_keycodes {
+ M_TGLHF = SAFE_RANGE,
+ M_TGG
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
LT(3, KC_MSTP), KC_VOLU, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT),
LAYOUT(
- LT(3, KC_ESC), M(3), M(4), M(5), M(6), M(7)),
+ LT(3, KC_ESC), C(KC_Z), C(S(KC_Z)), C(KC_X), C(KC_C), C(KC_V)),
LAYOUT(
- LT(3, KC_1), KC_2, KC_3, KC_4, M(0), M(1)),
+ LT(3, KC_1), KC_2, KC_3, KC_4, M_TGLHF, M_TGG),
LAYOUT(
KC_TRNS, KC_TRNS, RESET, TO(0), TO(1), TO(2)),
@@ -52,54 +57,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- //keyevent_t event = record->event;
-
- switch (id) {
- case 0:
- if (record->event.pressed) {
- return MACRO( T(T), T(G), T(L), T(H), T(F), T(ENT), END );
- }
- break;
- case 1:
- if (record->event.pressed) {
- return MACRO( T(T), T(G), T(G), T(ENT), END );
- }
- break;
- case 2:
- if (record->event.pressed) {
- return MACRO( D(NO), T(L), U(NO), END );
- }
- break;
- case 3:
- if (record->event.pressed) {
- return MACRO( D(LCTL), T(Z), U(LCTL), END );
- }
- break;
- case 4:
- if (record->event.pressed) {
- return MACRO( D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END );
- }
- break;
- case 5:
- if (record->event.pressed) {
- return MACRO( D(LCTL), T(X), U(LCTL), END );
- }
- break;
- case 6:
- if (record->event.pressed) {
- return MACRO( D(LCTL), T(C), U(LCTL), END );
- }
- break;
- case 7:
- if (record->event.pressed) {
- return MACRO( D(LCTL), T(V), U(LCTL), END );
- }
- break;
- }
- return MACRO_NONE;
-}
-
void set_switch_led(int ledId, bool state) {
if(state) {
switch(ledId) {
@@ -369,6 +326,18 @@ bool process_record_user (uint16_t keycode, keyrecord_t *record) {
led_set_layer(2);
}
break;
+ case M_TGLHF:
+ if (record->event.pressed) {
+ SEND_STRING("tglhf");
+ tap_code(KC_ENT);
+ }
+ return false;
+ case M_TGG:
+ if (record->event.pressed) {
+ SEND_STRING("tgg");
+ tap_code(KC_ENT);
+ }
+ return false;
}
return true;
-} \ No newline at end of file
+}
diff --git a/keyboards/knops/mini/rules.mk b/keyboards/knops/mini/rules.mk
index ca2a2a5f8..d4ed1d08d 100644
--- a/keyboards/knops/mini/rules.mk
+++ b/keyboards/knops/mini/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/kona_classic/keymaps/ansi/keymap.c b/keyboards/kona_classic/keymaps/ansi/keymap.c
index 5b53f21c6..e6ae4ce47 100644
--- a/keyboards/kona_classic/keymaps/ansi/keymap.c
+++ b/keyboards/kona_classic/keymaps/ansi/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/ansi_arrows/keymap.c b/keyboards/kona_classic/keymaps/ansi_arrows/keymap.c
index e9c0f326f..021cce832 100644
--- a/keyboards/kona_classic/keymaps/ansi_arrows/keymap.c
+++ b/keyboards/kona_classic/keymaps/ansi_arrows/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/ansi_arrows_lcap/keymap.c b/keyboards/kona_classic/keymaps/ansi_arrows_lcap/keymap.c
index 2ca5b7920..fde23ba94 100644
--- a/keyboards/kona_classic/keymaps/ansi_arrows_lcap/keymap.c
+++ b/keyboards/kona_classic/keymaps/ansi_arrows_lcap/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/ansi_split/keymap.c b/keyboards/kona_classic/keymaps/ansi_split/keymap.c
index 79be4e911..01e049c7b 100644
--- a/keyboards/kona_classic/keymaps/ansi_split/keymap.c
+++ b/keyboards/kona_classic/keymaps/ansi_split/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/ansi_split_arrows/keymap.c b/keyboards/kona_classic/keymaps/ansi_split_arrows/keymap.c
index 1e39f4aae..eba565bb4 100644
--- a/keyboards/kona_classic/keymaps/ansi_split_arrows/keymap.c
+++ b/keyboards/kona_classic/keymaps/ansi_split_arrows/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/default/keymap.c b/keyboards/kona_classic/keymaps/default/keymap.c
index ebfe0f248..a42e93680 100644
--- a/keyboards/kona_classic/keymaps/default/keymap.c
+++ b/keyboards/kona_classic/keymaps/default/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/iso/keymap.c b/keyboards/kona_classic/keymaps/iso/keymap.c
index 0d3753603..1486a8b75 100644
--- a/keyboards/kona_classic/keymaps/iso/keymap.c
+++ b/keyboards/kona_classic/keymaps/iso/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/iso_arrows/keymap.c b/keyboards/kona_classic/keymaps/iso_arrows/keymap.c
index a7ab26a35..96adc3482 100644
--- a/keyboards/kona_classic/keymaps/iso_arrows/keymap.c
+++ b/keyboards/kona_classic/keymaps/iso_arrows/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/iso_split/keymap.c b/keyboards/kona_classic/keymaps/iso_split/keymap.c
index 14935e992..278b4cd32 100644
--- a/keyboards/kona_classic/keymaps/iso_split/keymap.c
+++ b/keyboards/kona_classic/keymaps/iso_split/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/kona_classic/keymaps/iso_split_arrows/keymap.c b/keyboards/kona_classic/keymaps/iso_split_arrows/keymap.c
index 4eb184bae..1e8bc0418 100644
--- a/keyboards/kona_classic/keymaps/iso_split_arrows/keymap.c
+++ b/keyboards/kona_classic/keymaps/iso_split_arrows/keymap.c
@@ -44,9 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-// const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/laptreus/rules.mk b/keyboards/laptreus/rules.mk
index d17034507..01401ab38 100644
--- a/keyboards/laptreus/rules.mk
+++ b/keyboards/laptreus/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/launchpad/rules.mk b/keyboards/launchpad/rules.mk
index 2f9349a9b..b2c64db7a 100644
--- a/keyboards/launchpad/rules.mk
+++ b/keyboards/launchpad/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -64,4 +63,4 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-DEFAULT_FOLDER = launchpad/rev1 \ No newline at end of file
+DEFAULT_FOLDER = launchpad/rev1
diff --git a/keyboards/lets_split/keymaps/OLED_sample/keymap.c b/keyboards/lets_split/keymaps/OLED_sample/keymap.c
index 67a20971c..0cf3503e4 100644
--- a/keyboards/lets_split/keymaps/OLED_sample/keymap.c
+++ b/keyboards/lets_split/keymaps/OLED_sample/keymap.c
@@ -37,15 +37,9 @@ enum custom_keycodes {
RGBLED_DECREASE_SAT,
RGBLED_INCREASE_VAL,
RGBLED_DECREASE_VAL,
+ M_SAMPLE
};
-enum macro_keycodes {
- KC_SAMPLEMACRO,
-};
-
-//Macros
-#define M_SAMPLE M(KC_SAMPLEMACRO)
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -278,6 +272,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
+ case M_SAMPLE:
+ if (record->event.pressed){
+ SEND_STRING("hello world");
+ }
+ return false;
}
return true;
}
@@ -328,27 +327,6 @@ void music_scale_user(void)
#endif
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
-
- switch (id) {
- case KC_SAMPLEMACRO:
- if (record->event.pressed){
- return MACRO (I(10), T(H), T(E), T(L), T(L), T(O), T(SPACE), T(W), T(O), T(R), T(L), T(D), END);
- }
-
- }
-
- return MACRO_NONE;
-}
-
-
void matrix_update(struct CharacterMatrix *dest,
const struct CharacterMatrix *source) {
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
diff --git a/keyboards/lets_split_eh/rules.mk b/keyboards/lets_split_eh/rules.mk
index 99b1ba234..27661cebb 100644
--- a/keyboards/lets_split_eh/rules.mk
+++ b/keyboards/lets_split_eh/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
index 0985debdf..87c935862 100644
--- a/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk65_hs/keymaps/default/keymap.c
@@ -53,15 +53,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, KC_TR, RGB_SAD, RGB_HUD, RGB_SAI),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
index 68cb45915..81ab4338d 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/default/keymap.c
@@ -92,16 +92,6 @@ const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
index d0745382a..806f402e8 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/iso/keymap.c
@@ -92,16 +92,6 @@ const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
index d4fcb8854..35d17805c 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
+++ b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/keymap.c
@@ -92,16 +92,6 @@ const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
index fee3f7586..f35826880 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/default/keymap.c
@@ -100,16 +100,6 @@ const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c b/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
index a1236de2a..b86c99a41 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/lfk87/keymaps/iso/keymap.c
@@ -100,16 +100,6 @@ const uint16_t PROGMEM fn_actions[] = {
[7] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN7 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/default/keymap.c b/keyboards/lfkeyboards/lfkpad/keymaps/default/keymap.c
index afd24ba6e..3e131b241 100644
--- a/keyboards/lfkeyboards/lfkpad/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/lfkpad/keymaps/default/keymap.c
@@ -20,16 +20,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c b/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
index dc064ebf2..303fa9bb4 100644
--- a/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/mini1800/keymaps/default/keymap.c
@@ -100,16 +100,6 @@ const uint16_t PROGMEM fn_actions[] = {
ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
// This keymap only has a single base layer, so reset the default if needed
if(eeconfig_read_default_layer() > 1){
diff --git a/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c b/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
index 1861dcc1a..9c8ebdb63 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
+++ b/keyboards/lfkeyboards/smk65/keymaps/default/keymap.c
@@ -59,15 +59,6 @@ const uint16_t PROGMEM fn_actions[] = {
[5] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c b/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
index 6e5e57112..ebf085122 100644
--- a/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
+++ b/keyboards/lfkeyboards/smk65/keymaps/iso/keymap.c
@@ -59,16 +59,6 @@ const uint16_t PROGMEM fn_actions[] = {
[5] = ACTION_FUNCTION(LFK_CLICK_TOGGLE), // FN5 - Toggle audio click
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/lily58/rules.mk b/keyboards/lily58/rules.mk
index f2947c81c..0ef951872 100644
--- a/keyboards/lily58/rules.mk
+++ b/keyboards/lily58/rules.mk
@@ -6,7 +6,6 @@ SRC += ssd1306.c
# CFLAGS += -flto
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/m10a/keymaps/gam3cat/keymap.c b/keyboards/m10a/keymaps/gam3cat/keymap.c
index 8ee35d50a..2d79007fe 100644
--- a/keyboards/m10a/keymaps/gam3cat/keymap.c
+++ b/keyboards/m10a/keymaps/gam3cat/keymap.c
@@ -17,10 +17,10 @@ enum layers {
};
enum custom_keycodes {
- DYNAMIC_MACRO_RANGE = SAFE_RANGE,
- QMK_REV,
+ QMK_REV = SAFE_RANGE,
KC_WEB,
- KC_WCLS
+ KC_WCLS,
+ DYNAMIC_MACRO_RANGE
};
extern backlight_config_t backlight_config;
diff --git a/keyboards/m10a/keymaps/gam3cat/rules.mk b/keyboards/m10a/keymaps/gam3cat/rules.mk
index b09c2904f..00515a31e 100644
--- a/keyboards/m10a/keymaps/gam3cat/rules.mk
+++ b/keyboards/m10a/keymaps/gam3cat/rules.mk
@@ -22,4 +22,3 @@ FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By defaul
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
-
diff --git a/keyboards/m10a/rules.mk b/keyboards/m10a/rules.mk
index 0a00c7ccb..905babacb 100644
--- a/keyboards/m10a/rules.mk
+++ b/keyboards/m10a/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c b/keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c
index 11b4d70ca..447b0aca1 100644
--- a/keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c
@@ -135,7 +135,7 @@ void rgb_matrix_indicators_user(void)
break;
case _FNC: {
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
+ HSV hsv = { rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v };
HSV hui = hsv;
HSV hud = hsv;
HSV sai = hsv;
diff --git a/keyboards/maxr1998/pulse4k/config.h b/keyboards/maxr1998/pulse4k/config.h
index cb4eab699..d1bfaf300 100644
--- a/keyboards/maxr1998/pulse4k/config.h
+++ b/keyboards/maxr1998/pulse4k/config.h
@@ -43,7 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCE 5
/* Rotary encoders */
-#define NUMBER_OF_ENCODERS 2
#define ENCODERS_PAD_A { D2, F6 }
#define ENCODERS_PAD_B { D3, F5 }
#define ENCODER_RESOLUTION 4
diff --git a/keyboards/mechkeys/mk60/rules.mk b/keyboards/mechkeys/mk60/rules.mk
index e5a48d853..f1513f299 100644
--- a/keyboards/mechkeys/mk60/rules.mk
+++ b/keyboards/mechkeys/mk60/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -78,4 +77,4 @@ 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) \ No newline at end of file
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/mechllama/g35/config.h b/keyboards/mechllama/g35/config.h
new file mode 100644
index 000000000..61400fe9c
--- /dev/null
+++ b/keyboards/mechllama/g35/config.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2019 Kaylyn Bogle
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0xCEEB
+#define PRODUCT_ID 0x0035
+#define MANUFACTURER kaylynb
+#define PRODUCT MechLlama G35
+#define DESCRIPTION 35 key macropad
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 7
+
+#define DIODE_DIRECTION COL2ROW
+
+#define QMK_ESC_OUTPUT D6
+#define QMK_ESC_INPUT F5
+#define QMK_SPEAKER D2
+
+#define RGB_DI_PIN F7
+
+#define FORCE_NKRO
diff --git a/keyboards/mechllama/g35/g35.c b/keyboards/mechllama/g35/g35.c
new file mode 100644
index 000000000..e3925674f
--- /dev/null
+++ b/keyboards/mechllama/g35/g35.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 Kaylyn Bogle
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "g35.h"
diff --git a/keyboards/mechllama/g35/g35.h b/keyboards/mechllama/g35/g35.h
new file mode 100644
index 000000000..227527245
--- /dev/null
+++ b/keyboards/mechllama/g35/g35.h
@@ -0,0 +1,33 @@
+/* Copyright 2019 Kaylyn Bogle
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, \
+ K10, K11, K12, K13, K14, K15, K16, \
+ K20, K21, K22, K23, K24, K25, K26, \
+ K30, K31, K32, K33, K34, K35, K36, \
+ K40, K41, K42, K43, K44, K45, K46 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, }, \
+ { K10, K11, K12, K13, K14, K15, K16, }, \
+ { K20, K21, K22, K23, K24, K25, K26, }, \
+ { K30, K31, K32, K33, K34, K35, K36, }, \
+ { K40, K41, K42, K43, K44, K45, K46 } \
+}
diff --git a/keyboards/mechllama/g35/info.json b/keyboards/mechllama/g35/info.json
new file mode 100644
index 000000000..6fcc2412d
--- /dev/null
+++ b/keyboards/mechllama/g35/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "G35",
+ "url": "https://github.com/kaylynb/MechLlama-G35",
+ "maintainer": "kaylynb",
+ "width": 7,
+ "height": 5.75,
+ "key_count": 35,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"F1", "x":0, "y":0.5}, {"label":"Esc", "x":1, "y":0.5}, {"label":"1", "x":2, "y":0}, {"label":"2", "x":3, "y":0.15}, {"label":"3", "x":4, "y":0}, {"label":"4", "x":5, "y":0}, {"label":"5", "x":6, "y":0}, {"label":"F2", "x":0, "y":1.5}, {"label":"Tab", "x":1, "y":1.5}, {"label":"Q", "x":2, "y":1}, {"label":"W", "x":3, "y":1.15}, {"label":"E", "x":4, "y":1}, {"label":"R", "x":5, "y":1}, {"label":"T", "x":6, "y":1}, {"label":"F3", "x":0, "y":2.5}, {"label":"Shift", "x":1, "y":2.5}, {"label":"A", "x":2, "y":2}, {"label":"S", "x":3, "y":2.15}, {"label":"D", "x":4, "y":2}, {"label":"F", "x":5, "y":2}, {"label":"G", "x":6, "y":2}, {"label":"F4", "x":0, "y":3.5}, {"label":"Ctrl", "x":1, "y":3.5}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3.15}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"F5", "x":0, "y":4.5}, {"label":"Super", "x":1, "y":4.5}, {"label":"Alt", "x":2, "y":4, "h":1.5}, {"label":"Bksp", "x":3, "y":4.25, "h":1.25}, {"label":"Enter", "x":4, "y":4, "h":1.5}, {"label":"Space", "x":5, "y":4, "h":1.75}, {"label":"Fn", "x":6, "y":4, "h":1.75}]
+ }
+ }
+}
diff --git a/keyboards/mechllama/g35/keymaps/default/keymap.c b/keyboards/mechllama/g35/keymaps/default/keymap.c
new file mode 100644
index 000000000..4b7bf7651
--- /dev/null
+++ b/keyboards/mechllama/g35/keymaps/default/keymap.c
@@ -0,0 +1,72 @@
+/* Copyright 2019 Kaylyn Bogle
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE = 0,
+ _ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F1, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_F2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_F3, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_F4, KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ //
+ MO(_ADJUST),KC_LGUI, KC_LALT, KC_BSPC, KC_ENT, KC_SPC, KC_MINUS
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ RGB_TOG,TO(_BASE),XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_M_K, XXXXXXX, RGB_RMOD,RGB_HUI, RGB_MOD, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_SAI, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼
+ XXXXXXX, XXXXXXX, RGB_VAD, XXXXXXX, RGB_VAI, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼
+ //
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //└────────┴────────┴────────┴────────┴────────┴────────┴────────┘
+ ),
+};
+
+#if defined(OLED_DRIVER_ENABLE)
+const char* get_layer_name(uint8_t layer) {
+ switch (layer) {
+ case _BASE:
+ return PSTR("Default");
+ break;
+ case _ADJUST:
+ return PSTR("Adjust");
+ break;
+ default:
+ return PSTR("Unknown");
+ break;
+ }
+}
+
+void oled_task_user(void) {
+ oled_write_ln_P(get_layer_name(biton32(layer_state)), false);
+}
+#endif
diff --git a/keyboards/mechllama/g35/keymaps/default/readme.md b/keyboards/mechllama/g35/keymaps/default/readme.md
new file mode 100644
index 000000000..200a42f19
--- /dev/null
+++ b/keyboards/mechllama/g35/keymaps/default/readme.md
@@ -0,0 +1,4 @@
+![G35 Layout Image](https://i.imgur.com/fDlRAN9.png)
+# Default G35 Layout
+
+This is the default layout for the G35.
diff --git a/keyboards/mechllama/g35/readme.md b/keyboards/mechllama/g35/readme.md
new file mode 100644
index 000000000..e0d895b4e
--- /dev/null
+++ b/keyboards/mechllama/g35/readme.md
@@ -0,0 +1,15 @@
+# MechLlama G35
+
+![Photo](https://i.imgur.com/EvIA4t0.jpg)
+
+A 35 key left-handed columnar layout macropad.
+
+Keyboard Maintainer: [Kaylyn Bogle](https://github.com/kaylynb/)
+Hardware Supported: G35 v1 & v2
+Hardware Availability: [KiCad and Gerbers](https://github.com/kaylynb/MechLlama-G35)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechllama/g35/v2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mechllama/g35/rules.mk b/keyboards/mechllama/g35/rules.mk
new file mode 100644
index 000000000..1e1487513
--- /dev/null
+++ b/keyboards/mechllama/g35/rules.mk
@@ -0,0 +1,14 @@
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = atmel-dfu
+
+NKRO_ENABLE = yes
+OLED_DRIVER_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+
+DEFAULT_FOLDER = mechllama/g35/v2
diff --git a/keyboards/mechllama/g35/v1/config.h b/keyboards/mechllama/g35/v1/config.h
new file mode 100644
index 000000000..9e7be98ea
--- /dev/null
+++ b/keyboards/mechllama/g35/v1/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2019 Kaylyn Bogle
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 DEVICE_VER 0x0001
+
+#define MATRIX_ROW_PINS { F5, F6, F4, F1, D4 }
+#define MATRIX_COL_PINS { D6, D7, B4, B5, B6, F0, D5 }
+
+#define RGBLED_NUM 41
diff --git a/keyboards/mechllama/g35/v1/rules.mk b/keyboards/mechllama/g35/v1/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/mechllama/g35/v1/rules.mk
diff --git a/keyboards/mechllama/g35/v2/config.h b/keyboards/mechllama/g35/v2/config.h
new file mode 100644
index 000000000..09d5f607d
--- /dev/null
+++ b/keyboards/mechllama/g35/v2/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2019 Kaylyn Bogle
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 DEVICE_VER 0x0002
+
+#define MATRIX_ROW_PINS { F5, F4, F1, F0, D4 }
+#define MATRIX_COL_PINS { D6, D7, B4, B5, B6, F6, D5 }
+
+#define RGBLED_NUM 6
diff --git a/keyboards/mechllama/g35/v2/rules.mk b/keyboards/mechllama/g35/v2/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/mechllama/g35/v2/rules.mk
diff --git a/keyboards/mechmini/v2/keymaps/default/keymap.c b/keyboards/mechmini/v2/keymaps/default/keymap.c
index 23f61f918..b0701ed58 100755
--- a/keyboards/mechmini/v2/keymaps/default/keymap.c
+++ b/keyboards/mechmini/v2/keymaps/default/keymap.c
@@ -31,15 +31,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/meira/keymaps/default/keymap.c b/keyboards/meira/keymaps/default/keymap.c
index 5703999a0..9bcd771c4 100644
--- a/keyboards/meira/keymaps/default/keymap.c
+++ b/keyboards/meira/keymaps/default/keymap.c
@@ -174,22 +174,6 @@ void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
}
}
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/meira/rules.mk b/keyboards/meira/rules.mk
index 6c2472f43..2796335b6 100644
--- a/keyboards/meira/rules.mk
+++ b/keyboards/meira/rules.mk
@@ -1,7 +1,6 @@
SRC += matrix.c TWIlib.c issi.c lighting.c
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
diff --git a/keyboards/meishi/rules.mk b/keyboards/meishi/rules.mk
index 45eb6ee37..6cba6b6b8 100644
--- a/keyboards/meishi/rules.mk
+++ b/keyboards/meishi/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/meishi2/config.h b/keyboards/meishi2/config.h
new file mode 100644
index 000000000..f681eb500
--- /dev/null
+++ b/keyboards/meishi2/config.h
@@ -0,0 +1,250 @@
+/*
+Copyright 2019 Biacco42
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0xBC42
+#define PRODUCT_ID 0x0003
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Biacco42
+#define PRODUCT meishi2
+#define DESCRIPTION The better micro macro keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#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 { D7, E6 }
+#define MATRIX_COL_PINS { F5, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+//#define LCD_LINES 2 //< number of visible lines of the display
+//#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+//#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/meishi2/info.json b/keyboards/meishi2/info.json
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/meishi2/info.json
diff --git a/keyboards/meishi2/keymaps/default/config.h b/keyboards/meishi2/keymaps/default/config.h
new file mode 100644
index 000000000..4e23fe7b1
--- /dev/null
+++ b/keyboards/meishi2/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Biacco42
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/winkeyless/bface/backlight_ps2avrGB.h b/keyboards/meishi2/keymaps/default/keymap.c
index d5ca90399..6eb3b5a9f 100644
--- a/keyboards/winkeyless/bface/backlight_ps2avrGB.h
+++ b/keyboards/meishi2/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-/* Copyright 2017 Sebastian Kaim
+/* Copyright 2019 Biacco42
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,23 +13,23 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( /* Base */
+ LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V) \
+ )
+};
-#if defined(__AVR__)
-#include <avr/pgmspace.h>
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#endif
-#include <stddef.h>
-#include <stdlib.h>
-#include "backlight.h"
+void matrix_init_user(void) {
-#ifndef PS2AVRGB_BACKLIGHT_H
-#define PS2AVRGB_BACKLIGHT_H
+}
-uint8_t get_pwm_for_brightness(uint8_t level);
-void set_backlight_pwm(uint8_t level);
-void backlight_on(void);
-void backlight_off(void);
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
-#endif
diff --git a/keyboards/meishi2/keymaps/default/readme.md b/keyboards/meishi2/keymaps/default/readme.md
new file mode 100644
index 000000000..e03642d22
--- /dev/null
+++ b/keyboards/meishi2/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for meishi2 \ No newline at end of file
diff --git a/keyboards/meishi2/meishi2.c b/keyboards/meishi2/meishi2.c
new file mode 100644
index 000000000..a74e6d3e6
--- /dev/null
+++ b/keyboards/meishi2/meishi2.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 Biacco42
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "meishi2.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/meishi2/meishi2.h b/keyboards/meishi2/meishi2.h
new file mode 100644
index 000000000..776e0b0e1
--- /dev/null
+++ b/keyboards/meishi2/meishi2.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Biacco42
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ k00, k01, k02, k03 \
+) \
+{ \
+ { k00, k01 }, \
+ { k02, k03 } \
+}
diff --git a/keyboards/meishi2/readme.md b/keyboards/meishi2/readme.md
new file mode 100644
index 000000000..d80ec4418
--- /dev/null
+++ b/keyboards/meishi2/readme.md
@@ -0,0 +1,15 @@
+# meishi2
+
+![meishi2](https://i.imgur.com/lG5iI3m.jpg)
+
+meishi2 - The better micro macro keyboard
+
+Keyboard Maintainer: [Biacco42](https://github.com/Biacco42)
+Hardware Supported: The PCBs, controllers supported
+Hardware Availability: [links to where you can find this hardware](https://github.com/Biacco42/meishi2)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make meishi2: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/meishi2/rules.mk b/keyboards/meishi2/rules.mk
new file mode 100644
index 000000000..bc370be03
--- /dev/null
+++ b/keyboards/meishi2/rules.mk
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/melody96/config.h b/keyboards/melody96/config.h
index 201b1ad07..8ab88653f 100644
--- a/keyboards/melody96/config.h
+++ b/keyboards/melody96/config.h
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -46,5 +45,3 @@
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif
-
-#endif
diff --git a/keyboards/melody96/info.json b/keyboards/melody96/info.json
index e2a31c9f3..f69ae2679 100644
--- a/keyboards/melody96/info.json
+++ b/keyboards/melody96/info.json
@@ -7,6 +7,12 @@
"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":"Scroll Lock", "x":14, "y":0}, {"label":"Pause", "x":15, "y":0}, {"label":"Insert", "x":16, "y":0}, {"label":"Home", "x":17, "y":0}, {"label":"PgUp", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"+", "x":18, "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":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"x":18, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Enter", "x":18, "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":"Win", "x":11, "y":5}, {"x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"0", "x":16, "y":5}, {"label":".", "x":17, "y":5}, {"x":18, "y":5}]
+ },
+ "LAYOUT_hotswap": {
+ "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":"Home", "x":13, "y":0}, {"label":"End", "x":14, "y":0}, {"label":"PgUp", "x":15, "y":0}, {"label":"PgDn", "x":16, "y":0}, {"label":"Media Play", "x":17, "y":0}, {"label":"Pause", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"+", "x":18, "y":2, "h":2}, {"label":"Shift", "x":0, "y":4, "w":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":"Up", "x":14, "y":4}, {"label":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"GUI", "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":"Left", "x":13, "y":5}, {"label":"Down", "x":14, "y":5}, {"label":"Right", "x":15, "y":5}, {"label":"0", "x":16, "y":5}, {"label":".", "x":17, "y":5}, {"label":"Enter", "x":18, "y":4, "h":2}]
+ },
+ "LAYOUT_std60_split_num0": {
+ "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":"Home", "x":14, "y":0}, {"label":"End", "x":15, "y":0}, {"label":"PgUp", "x":16, "y":0}, {"label":"PgDn", "x":17, "y":0}, {"label":"Delete", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"+", "x":18, "y":2, "h":2}, {"label":"Shift", "x":0, "y":4, "w":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":2.75}, {"label":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"GUI", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"label":"Space", "x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5, "w":1.25}, {"label":"Fn", "x":11.25, "y":5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5, "w":1.25}, {"label":"0", "x":15, "y":5}, {"label":"00", "x":16, "y":5}, {"label":".", "x":17, "y":5}, {"label":"Enter", "x":18, "y":4, "h":2}]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/melody96/keymaps/default/keymap.c b/keyboards/melody96/keymaps/default/keymap.c
index 16f4561b5..ba73cbce8 100644
--- a/keyboards/melody96/keymaps/default/keymap.c
+++ b/keyboards/melody96/keymaps/default/keymap.c
@@ -69,10 +69,6 @@ BL_TOGG, BL_DEC, BL_INC changes the in-switch LEDs
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
diff --git a/keyboards/melody96/keymaps/default_std60_split_num0/keymap.c b/keyboards/melody96/keymaps/default_std60_split_num0/keymap.c
new file mode 100644
index 000000000..25881d3f8
--- /dev/null
+++ b/keyboards/melody96/keymaps/default_std60_split_num0/keymap.c
@@ -0,0 +1,40 @@
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ KC_P00 = SAFE_RANGE
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_std60_split_num0(
+ 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_PGUP, KC_PGDN, 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_P0, KC_P00, KC_PDOT, KC_PENT
+ ),
+
+ [0] = LAYOUT_std60_split_num0(
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_P00:
+ if (record->event.pressed) {
+ SEND_STRING("00");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/melody96/keymaps/default_std60_split_num0/readme.md b/keyboards/melody96/keymaps/default_std60_split_num0/readme.md
new file mode 100644
index 000000000..d20a179aa
--- /dev/null
+++ b/keyboards/melody96/keymaps/default_std60_split_num0/readme.md
@@ -0,0 +1,39 @@
+# default_std60_split_num0
+
+A modified default keymap for use with the LAYOUT_std60_split_num0 macro.
+
+## Base Layer
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Prt│Hm │End│PUp│PDn│Del│
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┤
+│` ~│1 !│2 @│3 #│4 $│5 %│6 ^│7 &│8 *│9 (│0 )│- _│= +│ Bksp │NLk│ / │ * │ - │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┼───┼───┼───┤
+│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │[ {│] }│ \ | │7 │8 │9 │ + │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤ │
+│CapsLk│ A │ S │ D │ F │ G │ H │ J │ K │ L │; :│' "│ Enter │4 │5 │6 │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┼───┼───┼───┼───┤
+│ Shift │ Z │ X │ C │ V │ B │ N │ M │, <│. >│/ ?│ Shift │1 │2 │3 │Ent│
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┼───┼───┼───┤ │
+│Ctrl│GUI │Alt │Space │Alt │Fn │Menu│Ctrl│0 │00 │ . │ │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┴───┴───┴───┴───┘
+```
+
+## Function Layer
+
+```
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│RST│ │ │ │ │ │ │ │ │ │ │ │ │Mut│VDn│VUp│ │ │ │
+├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┼───┼───┼───┤
+│ │RTg│ │RMd│RH+│RH-│RS+│RS-│RV+│RV-│ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤ │
+│BLTogg│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┼───┼───┼───┼───┤
+│ │ │ │BL-│BTg│BL+│ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┼───┼───┼───┤ │
+│ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┴───┴───┴───┴───┘
+```
diff --git a/keyboards/melody96/keymaps/konstantin/keymap.c b/keyboards/melody96/keymaps/konstantin/keymap.c
index 7d65a0e98..c2b043104 100644
--- a/keyboards/melody96/keymaps/konstantin/keymap.c
+++ b/keyboards/melody96/keymaps/konstantin/keymap.c
@@ -1,7 +1,7 @@
#include QMK_KEYBOARD_H
#include "konstantin.h"
-static const hsv_t *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW };
+static const HSV *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW };
static const size_t cnum = sizeof colors / sizeof *colors;
static size_t cidx = 0;
@@ -38,18 +38,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤P+ │
* │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │P4 │P5 │P6 │ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
- * │LSft│RAG│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │P1 │P2 │P3 │ │
- * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┤PEn│
- * │LCtl│LGui│LAlt│ Space │RAG│FnL│RCt│ ← │ ↓ │ → │P0 │P. │ │
- * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ * │LSft│RAG│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RSfRCt│ ↑ │P1 │P2 │P3 │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┼───┼───┤PEn│
+ * │LCtl│LGui│LAlt│ Space │RAlGu│FnLk │ ← │ ↓ │ → │P0 │P. │ │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┴───┴───┴───┘
*/
[L_BASE] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_INS, KC_HOME, KC_END, KC_PGUP, KC_PGDN,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_P7, KC_P8, KC_P9, XXXXXXX,
FN_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, RAL_RGU, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ KC_LSFT, RAL_RGU, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSF_RCT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, XXXXXXX, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
),
/* Function layer
@@ -62,9 +62,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤RSt│
* │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │RH-│RS-│RV-│ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
- * │ │ │MA0│MA2│MW←│MW→│ │ │ │Vo-│Vo+│Mut│ │PgU│RMR│RMS│RMB│ │
+ * │ │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│Mut│ │PgU│RMR│RMS│RMB│ │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┼───┼───┼───┼───┤RMP│
- * │ │DtPR│DtNA│ MW↓ │ │ │App│Hom│PgD│End│RM-│RM+│ │
+ * │ │DtPR│DtNA│ MW↓ │ │ │ │Hom│PgD│End│RM-│RM+│ │
* └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
*/
[L_FN] = LAYOUT(
@@ -72,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, RGB_TOG, DIVIDE, TIMES, MINUS,
KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SET,
- _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX,
- _______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, KC_APP, KC_HOME, KC_PGDN, KC_END, RGB_RMOD,RGB_MOD, RGB_M_P
+ _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX,
+ _______, DST_P_R, DST_N_A, KC_WH_D, _______, XXXXXXX, _______, KC_HOME, KC_PGDN, KC_END, RGB_RMOD,RGB_MOD, RGB_M_P
),
};
diff --git a/keyboards/melody96/melody96.c b/keyboards/melody96/melody96.c
index 2d313bc1e..2fe274ee4 100644
--- a/keyboards/melody96/melody96.c
+++ b/keyboards/melody96/melody96.c
@@ -1,7 +1,6 @@
#include "melody96.h"
-void led_set_user(uint8_t usb_led) {
-
+void led_set_kb(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
DDRC |= (1 << 6); PORTC &= ~(1 << 6);
} else {
@@ -19,4 +18,6 @@ void led_set_user(uint8_t usb_led) {
} else {
DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
}
-} \ No newline at end of file
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/melody96/melody96.h b/keyboards/melody96/melody96.h
index d846fa28d..37a6a85b0 100644
--- a/keyboards/melody96/melody96.h
+++ b/keyboards/melody96/melody96.h
@@ -1,5 +1,4 @@
-#ifndef MELODY96_H
-#define MELODY96_H
+#pragma once
#include "quantum.h"
@@ -64,4 +63,39 @@
{ K110, K111, K112, K113, K114, K115, K116, K117, K118 } \
}
-#endif
+/* LAYOUT_std60_split_num0
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Prt│Pau│Hm │End│PUp│PDn│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┴───┼───┼───┼───┼───┤
+ * │` ~│1 !│2 @│3 #│4 $│5 %│6 ^│7 &│8 *│9 (│0 )│- _│= +│ Bksp │NLk│ / │ * │ - │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┼───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │[ {│] }│ \ | │7 │8 │9 │ + │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤ │
+ * │CapsLk│ A │ S │ D │ F │ G │ H │ J │ K │ L │; :│' "│ Enter │4 │5 │6 │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┼───┼───┼───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │, <│. >│/ ?│ Shift │1 │2 │3 │Ent│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┼───┼───┼───┤ │
+ * │Ctrl│GUI │Alt │Space │Alt │GUI │Menu│Ctrl│0 │00 │ . │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┴───┴───┴───┴───┘
+ */
+#define LAYOUT_std60_split_num0( \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, KB8, KB7, KB5, KB4, KB3, KB6, KB2, KB1, KB0, K63, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, KA6, KA2, KA1, KA0, K64, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K94, K84, K96, K92, K91, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K93, K86, K82, K81, K80, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K78, K77, K75, K74, K76, K72, K71, \
+ K00, K01, K02, K06, K08, K07, K04, K03, K66, K62, K61, K60 \
+) { \
+ { K00, K01, K02, K03, K04, KC_NO, K06, K07, K08 }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
+ { K60, K61, K62, K63, K64, KC_NO, K66, KC_NO, KC_NO }, \
+ { KC_NO, K71, K72, KC_NO, K74, K75, K76, K77, K78 }, \
+ { K80, K81, K82, KC_NO, K84, K85, K86, K87, K88 }, \
+ { KC_NO, K91, K92, K93, K94, K95, K96, K97, K98 }, \
+ { KA0, KA1, KA2, KC_NO, KA4, KA5, KA6, KA7, KA8 }, \
+ { KB0, KB1, KB2, KB3, KB4, KB5, KB6, KB7, KB8 } \
+}
diff --git a/keyboards/melody96/readme.md b/keyboards/melody96/readme.md
index 73cc13262..2d472b327 100644
--- a/keyboards/melody96/readme.md
+++ b/keyboards/melody96/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make melody96:default
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/meme/rules.mk b/keyboards/meme/rules.mk
index 339bb5f6a..c9f2bd450 100644
--- a/keyboards/meme/rules.mk
+++ b/keyboards/meme/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u2
# Processor frequency.
diff --git a/keyboards/miniaxe/rules.mk b/keyboards/miniaxe/rules.mk
index 2f56a907b..3f5f699ff 100644
--- a/keyboards/miniaxe/rules.mk
+++ b/keyboards/miniaxe/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/minidox/rules.mk b/keyboards/minidox/rules.mk
index 861976e15..bcd74bcde 100644
--- a/keyboards/minidox/rules.mk
+++ b/keyboards/minidox/rules.mk
@@ -4,7 +4,6 @@ SRC += matrix.c \
serial.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -70,4 +69,4 @@ SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
-DEFAULT_FOLDER = minidox/rev1 \ No newline at end of file
+DEFAULT_FOLDER = minidox/rev1
diff --git a/keyboards/mint60/keymaps/default/keymap.c b/keyboards/mint60/keymaps/default/keymap.c
index 4a90bd57c..fde64d8de 100644
--- a/keyboards/mint60/keymaps/default/keymap.c
+++ b/keyboards/mint60/keymaps/default/keymap.c
@@ -52,22 +52,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
bool TOG_STATUS = false;
int RGB_current_mode;
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case RGBRST:
diff --git a/keyboards/mint60/rules.mk b/keyboards/mint60/rules.mk
index b4472153b..21efa65cf 100644
--- a/keyboards/mint60/rules.mk
+++ b/keyboards/mint60/rules.mk
@@ -4,7 +4,6 @@ SRC += i2c.c \
split_util.c \
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/mitosis/keymaps/default/keymap.c b/keyboards/mitosis/keymaps/default/keymap.c
index ec440ed75..6132ad6f7 100644
--- a/keyboards/mitosis/keymaps/default/keymap.c
+++ b/keyboards/mitosis/keymaps/default/keymap.c
@@ -18,16 +18,10 @@ enum mitosis_layers
enum mitosis_keycodes
{
FNKEY = SAFE_RANGE,
- SHIFT
-};
-
-
-// Macro definitions for readability
-enum mitosis_macros
-{
- VOLU,
- VOLD,
- ESCM
+ SHIFT,
+ M_VOLU,
+ M_VOLD,
+ M_ESCM
};
#define LONGPRESS_DELAY 150
@@ -39,8 +33,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_Q, KC_P, KC_Y, KC_C, KC_B, KC_V, KC_M, KC_U, KC_Z, KC_L,
KC_A, KC_N, KC_I, KC_S, KC_F, KC_D, KC_T, KC_H, KC_O, KC_R,
KC_COMM, KC_DOT, KC_J, KC_G, KC_SLSH, KC_SCLN, KC_W, KC_K, KC_QUOT, KC_X,
- M(VOLU), M(ESCM), KC_TAB, KC_LCTL, KC_LALT, KC_ENT, KC_DEL, KC_PGUP,
- M(VOLD), KC_LGUI, KC_E, FNKEY, SHIFT, KC_SPC, KC_BSPC, KC_PGDN
+ M_VOLU, M_ESCM, KC_TAB, KC_LCTL, KC_LALT, KC_ENT, KC_DEL, KC_PGUP,
+ M_VOLD, KC_LGUI, KC_E, FNKEY, SHIFT, KC_SPC, KC_BSPC, KC_PGDN
),
@@ -78,55 +72,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
static uint16_t key_timer;
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
-
- //switch multiplexing for media, short tap for volume up, long press for play/pause
- case VOLU:
- if (record->event.pressed) {
- key_timer = timer_read(); // if the key is being pressed, we start the timer.
- } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
- if (timer_elapsed(key_timer) > LONGPRESS_DELAY) { // LONGPRESS_DELAY being 150ms, the threshhold we pick for counting something as a tap.
- return MACRO(T(MPLY), END);
- } else {
- return MACRO(T(VOLU), END);
- }
- }
- break;
-
- //switch multiplexing for media, short tap for volume down, long press for next track
- case VOLD:
- if (record->event.pressed) {
- key_timer = timer_read();
- } else {
- if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
- return MACRO(T(MNXT), END);
- } else {
- return MACRO(T(VOLD), END);
- }
- }
- break;
-
- //switch multiplexing for escape, short tap for escape, long press for context menu
- case ESCM:
- if (record->event.pressed) {
- key_timer = timer_read();
- } else {
- if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
- return MACRO(T(APP), END);
- } else {
- return MACRO(T(ESC), END);
- }
- }
- break;
-
- break;
- }
- return MACRO_NONE;
-};
-
static bool singular_key = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
@@ -165,6 +110,44 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
update_tri_layer(_FUNCTION, _SHIFTED, _FUNCSHIFT);
return false;
break;
+ //switch multiplexing for media, short tap for volume up, long press for play/pause
+ case M_VOLU:
+ if (record->event.pressed) {
+ key_timer = timer_read(); // if the key is being pressed, we start the timer.
+ } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+ if (timer_elapsed(key_timer) > LONGPRESS_DELAY) { // LONGPRESS_DELAY being 150ms, the threshhold we pick for counting something as a tap.
+ tap_code(KC_MPLY);
+ } else {
+ tap_code(KC_VOLU);
+ }
+ }
+ return false;
+
+ //switch multiplexing for media, short tap for volume down, long press for next track
+ case M_VOLD:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ } else {
+ if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
+ tap_code(KC_MNXT);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ return false;
+
+ //switch multiplexing for escape, short tap for escape, long press for context menu
+ case M_ESCM:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ } else {
+ if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
+ tap_code(KC_APP);
+ } else {
+ tap_code(KC_ESC);
+ }
+ }
+ return false;
//If any other key was pressed during the layer mod hold period,
//then the layer mod was used momentarily, and should block latching
diff --git a/keyboards/mitosis/rules.mk b/keyboards/mitosis/rules.mk
index 0ca4ef1f0..34aa7070f 100644
--- a/keyboards/mitosis/rules.mk
+++ b/keyboards/mitosis/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c
index 754c20f7d..ae58f80a2 100644
--- a/keyboards/miuni32/keymaps/default/keymap.c
+++ b/keyboards/miuni32/keymaps/default/keymap.c
@@ -59,21 +59,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
void matrix_init_user(void) {
}
diff --git a/keyboards/miuni32/rules.mk b/keyboards/miuni32/rules.mk
index 1092e50d8..91cb2221e 100644
--- a/keyboards/miuni32/rules.mk
+++ b/keyboards/miuni32/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/model01/keymaps/tw1t611/config.h b/keyboards/model01/keymaps/tw1t611/config.h
new file mode 100644
index 000000000..8ab9d8b02
--- /dev/null
+++ b/keyboards/model01/keymaps/tw1t611/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 James Laird-Wah
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/model01/keymaps/tw1t611/keymap.c b/keyboards/model01/keymaps/tw1t611/keymap.c
new file mode 100644
index 000000000..b4bd53e3f
--- /dev/null
+++ b/keyboards/model01/keymaps/tw1t611/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+#include "keymap_german.h"
+
+/* layer constants */
+enum {
+ DEF = 0,
+ MOD,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DEF] = LAYOUT(
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , DE_SS ,
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, KC_MUTE, KC_Y , KC_U , KC_I , KC_O , KC_P , DE_AE ,
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , DE_PARA, _______, KC_H , KC_J , KC_K , KC_L , DE_SLSH, DE_OE ,
+ DE_PIPE, KC_Z , KC_X , KC_C , KC_V , KC_B , _______, _______, KC_N , KC_M , DE_COMM, DE_DOT , DE_MINS, DE_UE ,
+ KC_LALT, KC_LGUI,
+ KC_SPC , KC_ENT ,
+ KC_LSFT, MO(MOD),
+ KC_BSPC, KC_DEL ,
+ KC_LCTL, KC_RCTL
+ ),
+[MOD] = LAYOUT(
+ KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
+ DE_CIRC, DE_QUOT, DE_DQOT, DE_LCBR, DE_RCBR, DE_GRV , RGB_TOG, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END , DE_EQL , DE_PERC,
+ DE_TILD, DE_EXLM, DE_DLR , DE_LPRN, DE_RPRN, DE_AMPR, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, DE_QST , DE_ASTR,
+ DE_BSLS, DE_HASH, DE_LESS, DE_LBRC, DE_RBRC, DE_MORE, _______, RESET , DE_AT , DE_EURO, DE_SCLN, DE_COLN, DE_UNDS, DE_PLUS,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______
+ )
+};
+
+/* template for new layouts:
+LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______
+ )
+*/
+
+/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/model01/keymaps/tw1t611/readme.md b/keyboards/model01/keymaps/tw1t611/readme.md
new file mode 100644
index 000000000..b9d728831
--- /dev/null
+++ b/keyboards/model01/keymaps/tw1t611/readme.md
@@ -0,0 +1,5 @@
+# Keymap for Keyboardio's Model01 by tw1t611
+
+Features:
+- german keymap
+- vim optimized
diff --git a/keyboards/model01/rules.mk b/keyboards/model01/rules.mk
index 49ab981d1..4345027f4 100644
--- a/keyboards/model01/rules.mk
+++ b/keyboards/model01/rules.mk
@@ -1,5 +1,5 @@
-SRC += i2c_master.c \
- leds.c \
+QUANTUM_LIB_SRC += i2c_master.c
+SRC += leds.c \
matrix.c
# MCU name
diff --git a/keyboards/mxss/keymaps/default/keymap.c b/keyboards/mxss/keymaps/default/keymap.c
index 7ac107f37..17cebe0c8 100644
--- a/keyboards/mxss/keymaps/default/keymap.c
+++ b/keyboards/mxss/keymaps/default/keymap.c
@@ -51,22 +51,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/mxss/rules.mk b/keyboards/mxss/rules.mk
index f46ae6374..ac7a1ee8f 100644
--- a/keyboards/mxss/rules.mk
+++ b/keyboards/mxss/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/naked48/config.h b/keyboards/naked48/config.h
new file mode 100644
index 000000000..b37d10221
--- /dev/null
+++ b/keyboards/naked48/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+// GCC include 'config.h" sequence in qmk_firmware/keyboards/naked48/
+// -include keyboards/naked48/config.h
+// -include keyboards/naked48/rev?/config.h
+// -include keyboards/naked48/rev?/keymaps/MAPNAME/config.h
+// XXXX.c
+
+#include <serial_config.h>
+
+// GCC include search path in qmk_firmare/keyboards/naked48/
+// #include "..." search starts here:
+// #include <...> search starts here:
+// keyboards/naked48/rev?/keymaps/MAPNAME
+// keyboards/naked48
+// keyboards/naked48/rev?
+// .
+// ./tmk_core
+// ......
+
+// MACRO and FUNCTION are features that are depreciated.
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/naked48/info.json b/keyboards/naked48/info.json
new file mode 100644
index 000000000..362fc9f5e
--- /dev/null
+++ b/keyboards/naked48/info.json
@@ -0,0 +1,251 @@
+{
+ "keyboard_name": "Naked48",
+ "url": "https://salicylic-acid3.hatenablog.com/",
+ "maintainer": "Salicylic_acid3",
+ "width": 14,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {
+ "label":"Tab",
+ "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":8,
+ "y":0
+ },
+ {
+ "label":"U",
+ "x":9,
+ "y":0
+ },
+ {
+ "label":"I",
+ "x":10,
+ "y":0
+ },
+ {
+ "label":"O",
+ "x":11,
+ "y":0
+ },
+ {
+ "label":"P",
+ "x":12,
+ "y":0
+ },
+ {
+ "label":"Back Space",
+ "x":13,
+ "y":0
+ },
+ {
+ "label":"Esc",
+ "x":0,
+ "y":1
+ },
+ {
+ "label":"A",
+ "x":1,
+ "y":1
+ },
+ {
+ "label":"S",
+ "x":2,
+ "y":1
+ },
+ {
+ "label":"D",
+ "x":3,
+ "y":1
+ },
+ {
+ "label":"F",
+ "x":4,
+ "y":1
+ },
+ {
+ "label":"G",
+ "x":5,
+ "y":1
+ },
+ {
+ "label":"H",
+ "x":8,
+ "y":1
+ },
+ {
+ "label":"J",
+ "x":9,
+ "y":1
+ },
+ {
+ "label":"K",
+ "x":10,
+ "y":1
+ },
+ {
+ "label":"L",
+ "x":11,
+ "y":1
+ },
+ {
+ "label":";",
+ "x":12,
+ "y":1
+ },
+ {
+ "label":"'",
+ "x":13,
+ "y":1
+ },
+ {
+ "label":"Shift",
+ "x":0,
+ "y":2
+ },
+ {
+ "label":"Z",
+ "x":1,
+ "y":2
+ },
+ {
+ "label":"X",
+ "x":2,
+ "y":2
+ },
+ {
+ "label":"C",
+ "x":3,
+ "y":2
+ },
+ {
+ "label":"V",
+ "x":4,
+ "y":2
+ },
+ {
+ "label":"B",
+ "x":5,
+ "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":"/",
+ "x":12,
+ "y":2
+ },
+ {
+ "label":"Enter",
+ "x":13,
+ "y":2
+ },
+ {
+ "label":"Adjust",
+ "x":1,
+ "y":3
+ },
+ {
+ "label":"Ctrl",
+ "x":2,
+ "y":3
+ },
+ {
+ "label":"Alt",
+ "x":3,
+ "y":3
+ },
+ {
+ "label":"GUI",
+ "x":4,
+ "y":3
+ },
+ {
+ "label":"&dArr;",
+ "x":5,
+ "y":3
+ },
+ {
+ "x":6,
+ "y":3
+ },
+ {
+ "x":7,
+ "y":3
+ },
+ {
+ "label":"&uArr;",
+ "x":8,
+ "y":3
+ },
+ {
+ "label":"&larr;",
+ "x":9,
+ "y":3
+ },
+ {
+ "label":"&darr;",
+ "x":10,
+ "y":3
+ },
+ {
+ "label":"&uarr;",
+ "x":11,
+ "y":3
+ },
+ {
+ "label":"&rarr;",
+ "x":12,
+ "y":3
+ }
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/default/config.h b/keyboards/naked48/keymaps/default/config.h
new file mode 100644
index 000000000..ad417f7f0
--- /dev/null
+++ b/keyboards/naked48/keymaps/default/config.h
@@ -0,0 +1,41 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_ANIMATIONS)
+ //#define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ //#define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ //#define RGBLIGHT_EFFECT_RGB_TEST
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/default/keymap.c b/keyboards/naked48/keymaps/default/keymap.c
new file mode 100644
index 000000000..3229f74ec
--- /dev/null
+++ b/keyboards/naked48/keymaps/default/keymap.c
@@ -0,0 +1,135 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
+
+// Layer Mode aliases
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+#define KC_SNUBS S(KC_NUBS)
+#define KC_SNUHS S(KC_NUHS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+
+ [_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_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_SNUHS,KC_SNUBS, _____, _____, _____,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, _____, _____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+
+ [_RAISE] = LAYOUT(
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_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, _____, _____, _____,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+
+ [_ADJUST] = LAYOUT( /* Base */
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ _____, RESET, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, _____,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ )
+};
+
+static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+
+ pressed ? layer_on(layer1) : layer_off(layer1);
+ IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
diff --git a/keyboards/naked48/keymaps/default/readme.md b/keyboards/naked48/keymaps/default/readme.md
new file mode 100644
index 000000000..431a57340
--- /dev/null
+++ b/keyboards/naked48/keymaps/default/readme.md
@@ -0,0 +1,45 @@
+# The default keymap for naked48
+
+Default
+ //,-----------------------------------------| |-----------------------------------------.
+ TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ ESC, A, S, D, F, G, H, J, K, L, ;, :,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, Z, X, C, V, B, N, M, ,, ., /, ENT,
+ //|------+------+------+------+------+------|------+------+------+------+------+------+------|
+ ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, LEFT, DOWN, UP, RIGHT
+ //`----------------------------------------------------------------------------------'
+
+Lower
+ //,-----------------------------------------| |-----------------------------------------.
+ ~, !, @, #, $, %, ^, &, *, (, ), DEL,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ DEL, F1, F2, F3, F4, F5, F6, _, +, {, }, |,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, F7, F8, F9, F10, F11, F12, ~, |, ,, ., ENT,
+ //|------+------+------+------+------+------|------+------+------+------+------+------+------|
+ ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, MNXT, VOLD, VOLU, MPLY
+ //`----------------------------------------------------------------------------------'
+
+Raise
+ //,-----------------------------------------| |-----------------------------------------.
+ ~, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ DEL, F1, F2, F3, F4, F5, F6, -, =, [, ], BSLS,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, F7, F8, F9, F10, F11, F12, #, \, ,, ., ENT,
+ //|------+------+------+------+------+------|------+------+------+------+------+------+------|
+ ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, MNXT, VOLD, VOLU, MPLY
+ //`----------------------------------------------------------------------------------'
+
+Adjust
+ //,-----------------------------------------| |----------------------------------------------.
+ ~, RST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, DEL,
+ //|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
+ DEL, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, LED ON/Off,LED MOD, XXXXX, C+A+D,Alt+PSCR, PSCR,
+ //|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
+ LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, LED VAD,LED VAI,LED HUD,LED HUI,LED SAD,LED SAI,
+ //|------+------+------+------+------+------|------+------+------+-------+-------+-------+-------+-------|
+ ADJUST, LCTRL, LALT, LGUI, LOWER, SPC, SPC, RAISE, MNXT, VOLD, VOLU, MPLY
+ //`--------------------------------------------------------------------------------------' \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/default/rules.mk b/keyboards/naked48/keymaps/default/rules.mk
new file mode 100644
index 000000000..ee538432e
--- /dev/null
+++ b/keyboards/naked48/keymaps/default/rules.mk
@@ -0,0 +1,29 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# If your custom naked48 pcb, you can rewrite to yes.
+LED_ANIMATIONS = yes # LED animations
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/config.h b/keyboards/naked48/keymaps/default_with_nafuda/config.h
new file mode 100644
index 000000000..a55856b24
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_nafuda/config.h
@@ -0,0 +1,64 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_ANIMATIONS)
+ //#define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ //#define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ //#define RGBLIGHT_EFFECT_RGB_TEST
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+#define MK_3_SPEED
+
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 0
+
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 150
+
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 3
+
+#undef MOUSEKEY_MOVE_DELTA
+#define MOUSEKEY_MOVE_DELTA 5
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 0
+
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/keymap.c b/keyboards/naked48/keymaps/default_with_nafuda/keymap.c
new file mode 100644
index 000000000..c1a9056a9
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_nafuda/keymap.c
@@ -0,0 +1,173 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _MOUSE,
+ _BROWSER,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ MOUSE = SAFE_RANGE,
+ BROWSER,
+ LOWER,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
+
+// Fillers to make layering more clear
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+#define KC_CAD LCA(KC_DEL)
+#define KC_APSCR LALT(KC_PSCR)
+
+#define KC_SNUBS S(KC_NUBS)
+#define KC_SNUHS S(KC_NUHS)
+
+#define KC_RTAB LCTL(KC_TAB)
+#define KC_LTAB LCTL(LSFT(KC_TAB))
+#define KC_CTAB LCTL(KC_W)
+#define KC_RETAB LCTL(LSFT(KC_T))
+
+#define KC_TGMO TG(_MOUSE)
+#define KC_TGBR TG(_BROWSER)
+#define KC_BSAD LT(_ADJUST, KC_BSPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ 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_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_BSAD, KC_UP, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_LEFT, KC_DOWN,KC_RIGHT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_MOUSE] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ 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_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_BTN1, KC_MS_U, KC_BTN2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_MS_L, KC_MS_D, KC_MS_R,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_BROWSER] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ 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_CTAB,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_RETAB, KC_WH_U, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_LTAB, KC_WH_D, KC_RTAB,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_LOWER] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ 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_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_BSAD, KC_UP, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ _____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _____, _____, _____, KC_LEFT, KC_DOWN,KC_RIGHT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ _____, _____, _____, _____, _____, _____, _____, _____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_RAISE] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ 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_BSAD, KC_UP, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ _____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _____, _____, _____, KC_LEFT, KC_DOWN,KC_RIGHT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_with_nafuda( /* Base */
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ _____, RESET, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, _____, RGB_VAD,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, ADJUST, RGB_SAD, RGB_VAI,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_MOD, RGB_TOG, RGB_SAI,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ )
+};
+
+static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+
+ pressed ? layer_on(layer1) : layer_off(layer1);
+ IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/readme.md b/keyboards/naked48/keymaps/default_with_nafuda/readme.md
new file mode 100644
index 000000000..780481be2
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_nafuda/readme.md
@@ -0,0 +1,39 @@
+# The default_with_nafuda keymap for naked48
+
+Add Nafuda maps to the default layout.
+
+Default
+ //|--------------------|
+ Mouse,
+ //|------+------+------|
+ BS + Ad, UP,Browser,
+ //|------+------+------|
+ LEFT, DOWN, RIGHT
+ //|--------------------|
+
+Mouse
+ //|--------------------|
+ Default,
+ //|------+------+------|
+ BTN1, MS_U, BTN2,
+ //|------+------+------|
+ MS_L, MS_D, MS_R
+ //|--------------------|
+
+Browser
+ //|--------------------|
+ CloseTAB,
+ //|------+------+------|
+ ReOpenTAB, WH_U,Default,
+ //|------+------+------|
+ LTAB, WH_D, RTAB
+ //|--------------------|
+
+Adjust
+ //|------------------------|
+ LED VAD,
+ //|------+----------+------|
+ Default, LED HUD,LED VAI,
+ //|------+----------+------|
+ LED MOD,LED ON/Off,LED HUI
+ //|------------------------|
diff --git a/keyboards/naked48/keymaps/default_with_nafuda/rules.mk b/keyboards/naked48/keymaps/default_with_nafuda/rules.mk
new file mode 100644
index 000000000..dd471767a
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_nafuda/rules.mk
@@ -0,0 +1,29 @@
+
+# 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 = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# If your custom naked48 pcb, you can rewrite to yes.
+LED_ANIMATIONS = yes # LED animations
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/naked48/keymaps/default_with_setta21/config.h b/keyboards/naked48/keymaps/default_with_setta21/config.h
new file mode 100644
index 000000000..ad417f7f0
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_setta21/config.h
@@ -0,0 +1,41 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_ANIMATIONS)
+ //#define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ //#define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ //#define RGBLIGHT_EFFECT_RGB_TEST
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/default_with_setta21/keymap.c b/keyboards/naked48/keymaps/default_with_setta21/keymap.c
new file mode 100644
index 000000000..32d56a508
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_setta21/keymap.c
@@ -0,0 +1,174 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ KANJI,
+ RGBRST,
+ SEND_SUM,
+ SEND_AVERAGE,
+ SEND_COUNTIF,
+ SEND_MAX,
+ SEND_MIN
+};
+
+// Fillers to make layering more clear
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+#define KC_SNUBS S(KC_NUBS)
+#define KC_SNUHS S(KC_NUHS)
+
+#define KC_SSUM SEND_SUM
+#define KC_SAVE SEND_AVERAGE
+#define KC_SCOU SEND_COUNTIF
+#define KC_SMAX SEND_MAX
+#define KC_SMIN SEND_MIN
+
+#define KC_RADO LT(_RAISE, KC_PDOT)
+#define KC_LOP0 LT(_LOWER, KC_P0)
+#define KC_ADNL LT(_ADJUST, KC_NLCK)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_with_setta21(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ 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_LOP0, KC_P1, KC_P4, KC_P7,KC_ADNL, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ 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_P2, KC_P5, KC_P8,KC_PSLS, KC_F2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ 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_RADO, KC_P3, KC_P6, KC_P9,KC_PAST, KC_EQL,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ ADJUST,KC_LCTRL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ ),
+
+ [_LOWER] = LAYOUT_with_setta21(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,KC_LPRN, KC_RPRN, KC_DEL, LOWER, XXXXX,KC_LEFT, XXXXX, XXXXX, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ 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_DOWN,KC_DOWN, KC_UP,KC_PSLS, KC_F2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ _____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,KC_SNUHS,KC_SNUBS, _____, _____, _____, RAISE, XXXXX,KC_RIGHT, XXXXX,KC_PAST, KC_EQL,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ _____, _____, _____, _____, _____, _____, _____, _____, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ ),
+
+
+ [_RAISE] = LAYOUT_with_setta21(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, LOWER, KC_F11, KC_F4, KC_F7,KC_SMIN, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ 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_F12, KC_F5, KC_F8,KC_SMAX, KC_F2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ _____, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _____, _____, _____, RAISE, KC_F3, KC_F6, KC_F9,KC_SCOU, KC_EQL,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_RPRN, KC_SSUM,KC_SAVE, KC_DEL
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ ),
+
+ [_ADJUST] = LAYOUT_with_setta21( /* Base */
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ _____, RESET, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, _____, LOWER,RGB_VAD,RGB_HUD,RGB_SAD, ADJUST,RGB_TOG,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, RGB_VAI,RGB_HUI,RGB_SAI, XXXXX, _____,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RAISE, XXXXX, XXXXX, XXXXX, XXXXX, _____,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, RGB_MOD, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ )
+};
+
+static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+
+ pressed ? layer_on(layer1) : layer_off(layer1);
+ IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
+ break;
+ case SEND_SUM:
+ if (record->event.pressed) {
+ SEND_STRING("=SUM(");
+ }
+ break;
+ case SEND_AVERAGE:
+ if (record->event.pressed) {
+ SEND_STRING("=AVERAGE(");
+ }
+ break;
+ case SEND_COUNTIF:
+ if (record->event.pressed) {
+ SEND_STRING("=COUNTIF(");
+ }
+ break;
+ case SEND_MAX:
+ if (record->event.pressed) {
+ SEND_STRING("=MAX(");
+ }
+ break;
+ case SEND_MIN:
+ if (record->event.pressed) {
+ SEND_STRING("=MIN(");
+ }
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
diff --git a/keyboards/naked48/keymaps/default_with_setta21/readme.md b/keyboards/naked48/keymaps/default_with_setta21/readme.md
new file mode 100644
index 000000000..921c1e495
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_setta21/readme.md
@@ -0,0 +1,47 @@
+# The default_with_setta21 keymap for naked48
+
+Add Setta21 maps to the default layout.
+
+Default
+ //|-----------------------------------------|
+ Rai+0, 1, 4, 7,Ad+Num, ESC,
+ //|------+------+------+------+------+------|
+ 2, 5, 8, /, F2,
+ //|------+------+------+------+------+------|
+ Low+., 3, 6, 9, *, =,
+ //|-------------+-------------+------+------|
+ ENT, +, -, DEL
+ //|-----------------------------------------|
+
+Lower
+ //|-----------------------------------------|
+ RAISE, F11, F4, F7, "=MIN(", ESC,
+ //|------+------+------+------+-----------+------|
+ F12, F5, F8, "=MAX(", F2,
+ //|------+------+------+------+-----------+------|
+ LOWER, F3, F6, F9,"=COUNTIF(", =,
+ //|-------------+-------------+-----------+------|
+ ), "=SUM(","=AVERAGE(", DEL
+ //|-----------------------------------------|
+
+Raise
+ //|-----------------------------------------|
+ RAISE, XXXXX, LEFT, XXXXX, XXXXX, ESC,
+ //|------+------+------+------+------+------|
+ DOWN, DOWN, UP, /, F2,
+ //|------+------+------+------+------+------|
+ LOWER, XXXXX, RIGHT, XXXXX, *, =,
+ //|-------------+-------------+------+------|
+ ENT, +, -, DEL
+ //|-----------------------------------------|
+
+Adjust
+ //|------------------------------------------------|
+ LED ON/Off,LED VAD,LED HUD,LED SAD, ADJUST, ESC,
+ //|--------+-------+-------+-------+-------+-------|
+ LED VAI,LED HUI,LED SAI, XXXXX, F2,
+ //|--------+-------+-------+-------+-------+-------|
+ XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, =,
+ //|----------------+---------------+-------+-------|
+ LED MOD, +, -, DEL
+ //|------------------------------------------------|
diff --git a/keyboards/naked48/keymaps/default_with_setta21/rules.mk b/keyboards/naked48/keymaps/default_with_setta21/rules.mk
new file mode 100644
index 000000000..ee538432e
--- /dev/null
+++ b/keyboards/naked48/keymaps/default_with_setta21/rules.mk
@@ -0,0 +1,29 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# If your custom naked48 pcb, you can rewrite to yes.
+LED_ANIMATIONS = yes # LED animations
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/naked48/keymaps/salicylic/config.h b/keyboards/naked48/keymaps/salicylic/config.h
new file mode 100644
index 000000000..ad417f7f0
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic/config.h
@@ -0,0 +1,41 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_ANIMATIONS)
+ //#define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ //#define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ //#define RGBLIGHT_EFFECT_RGB_TEST
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/salicylic/keymap.c b/keyboards/naked48/keymaps/salicylic/keymap.c
new file mode 100644
index 000000000..99c95cb02
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic/keymap.c
@@ -0,0 +1,149 @@
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ KANJI,
+ RGBRST
+};
+
+// Fillers to make layering more clear
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+#define KC_CT11 LCTL_T(KC_F11)
+#define KC_SF12 SFT_T(KC_F12)
+#define KC_LOEN LT(_LOWER, KC_ENT)
+#define KC_RASP LT(_RAISE, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+
+ [_LOWER] = LAYOUT(
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, KC_ZKHK, LOWER, _____, _____, RAISE, KC_0, JP_DOT, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+
+ [_RAISE] = LAYOUT(
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXX, KC_UP, XXXXX, KC_PGUP, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXX, XXXXX, XXXXX, XXXXX, KC_PGDN, XXXXX,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT( /* Base */
+ //,-----------------------------------------------------| |-----------------------------------------------------.
+ _____, _____, _____, _____, _____, _____, _____, KC_7, KC_8, KC_9, KC_0, _____,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ )
+};
+
+static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+
+ pressed ? layer_on(layer1) : layer_off(layer1);
+ IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
+ break;
+ case KANJI:
+ if (record->event.pressed) {
+ if (keymap_config.swap_lalt_lgui == false) {
+ register_code(KC_LANG2);
+ } else {
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
diff --git a/keyboards/naked48/keymaps/salicylic/readme.md b/keyboards/naked48/keymaps/salicylic/readme.md
new file mode 100644
index 000000000..cd5e6e729
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic/readme.md
@@ -0,0 +1,46 @@
+# The salicylic keymap for naked48
+
+Default
+ //,-----------------------------------------| |-----------------------------------------.
+ TAB, Q, W, E, R, T, Y, U, I, O, P, [,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, A, S, D, F, G, H, J, K, L, -, ],
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LCTRL, Z, X, C, V, B, N, M, ,, ., /, \,
+ //|------+------+------+------+------+-------|------+-----+-------+-----+------+------+------|
+ LEFT, RIGHT, LGUI, MHEN,Low+Ent, BSPC, DEL,Rai+SPC, HENK, LALT, UP, DOWN
+ //`----------------------------------------------------------------------------------'
+
+Lower
+ //,-----------------------------------------| |-----------------------------------------.
+ ESC, EXLM, JQUES, JLBRC, JRBRC, JTILD, 6, 7, 8, 9, *, /,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ JQUOT, HASH, JDQUO, JLPRN, JRPRN, JAT, XXXXX, 4, 5, 6, -, =,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ JHAT, PERC, JAMPR, SCLN, JCLON, JPIPE, 0, 1, 2, 3, +, ENT,
+ //|------+------+------+------+------+------|------+------+------+------+------+------+------|
+ LEFT, RIGHT, LGUI, ZKHK, LOWER, BSPC, DEL, RAISE, 0, DOT, UP, DOWN
+ //`----------------------------------------------------------------------------------'
+
+Raise
+ //,-----------------------------------------| |-----------------------------------------.
+ ESC, 1, 2, 3, 4, 5, 6, XXXXX, UP, XXXXX, PGUP, BSPC,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ Ctrl F11, F1, F2, F3, F4, F5, XXXXX, LEFT, DOWN, RIGHT, LSFT, ENT,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ Shift F12, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, XXXXX, PGDN, XXXXX,
+ //|------+------+------+------+------+------|------+------+------+------+------+------+------|
+ LEFT, RIGHT, LGUI, ZKHK, LOWER, BSPC, DEL, RAISE, 0, DOT, UP, DOWN
+ //`----------------------------------------------------------------------------------'
+
+Adjust
+ //,-----------------------------------------| |----------------------------------------------.
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
+ //|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
+ Ctrl F11, F1, F2, F3, F4, F5, LED ON/Off,LED MOD, XXXXX, C+A+D,Alt+PSCR, PSCR,
+ //|------+------+------+------+------+------| |------+-------+-------+-------+-------+-------|
+ Shift F12, F6, F7, F8, F9, F10, LED VAD,LED VAI,LED HUD,LED HUI,LED SAD,LED SAI,
+ //|------+------+------+------+------+------|------+------+------+-------+-------+-------+-------|
+ LEFT, RIGHT, LGUI, ZKHK, LOWER, BSPC, DEL, RAISE, 0, DOT, UP, DOWN
+ //`--------------------------------------------------------------------------------------'
+ ) \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/salicylic/rules.mk b/keyboards/naked48/keymaps/salicylic/rules.mk
new file mode 100644
index 000000000..ee538432e
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic/rules.mk
@@ -0,0 +1,29 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# If your custom naked48 pcb, you can rewrite to yes.
+LED_ANIMATIONS = yes # LED animations
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/config.h b/keyboards/naked48/keymaps/salicylic_with_nafuda/config.h
new file mode 100644
index 000000000..a55856b24
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_nafuda/config.h
@@ -0,0 +1,64 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_ANIMATIONS)
+ //#define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ //#define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ //#define RGBLIGHT_EFFECT_RGB_TEST
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+#define MK_3_SPEED
+
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 0
+
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 150
+
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 3
+
+#undef MOUSEKEY_MOVE_DELTA
+#define MOUSEKEY_MOVE_DELTA 5
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 0
+
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 0
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c b/keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c
new file mode 100644
index 000000000..1551b8263
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_nafuda/keymap.c
@@ -0,0 +1,188 @@
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _MOUSE,
+ _BROWSER,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ MOUSE = SAFE_RANGE,
+ BROWSER,
+ LOWER,
+ RAISE,
+ ADJUST,
+ KANJI,
+ RGBRST
+};
+
+// Fillers to make layering more clear
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+#define KC_CT11 LCTL_T(KC_F11)
+#define KC_SF12 SFT_T(KC_F12)
+
+#define KC_LOEN LT(_LOWER, KC_ENT)
+#define KC_RASP LT(_RAISE, KC_SPC)
+#define KC_CAD LCA(KC_DEL)
+#define KC_APSCR LALT(KC_PSCR)
+
+#define KC_RTAB LCTL(KC_TAB)
+#define KC_LTAB LCTL(LSFT(KC_TAB))
+#define KC_CTAB LCTL(KC_W)
+#define KC_RETAB LCTL(LSFT(KC_T))
+
+#define KC_TGMO TG(_MOUSE)
+#define KC_TGBR TG(_BROWSER)
+#define KC_BSAD LT(_ADJUST, KC_BSPC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_BSAD, KC_UP, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_LEFT, KC_DOWN,KC_RIGHT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_MOUSE] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_BTN1, KC_MS_U, KC_BTN2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_MS_L, KC_MS_D, KC_MS_R,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_BROWSER] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_CTAB,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_RETAB, KC_WH_U, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_LTAB, KC_WH_D, KC_RTAB,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_LOWER] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, KC_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL, KC_BSAD, KC_UP, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT, KC_LEFT, KC_DOWN,KC_RIGHT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ _____, _____, _____, KC_ZKHK, LOWER, _____, _____, RAISE, KC_0, JP_DOT, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_RAISE] = LAYOUT_with_nafuda(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, KC_TGMO,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT, KC_BSAD, KC_UP, KC_TGBR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXX, XXXXX, XXXXX, XXXXX, KC_PGDN, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_with_nafuda( /* Base */
+ //,-----------------------------------------------------| |-----------------------------------------------------. |--------------------------|
+ _____, _____, _____, _____, _____, _____, _____, KC_7, KC_8, KC_9, KC_0, _____, RGB_VAD,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, ADJUST, RGB_SAD, RGB_VAI,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ _____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_MOD, RGB_TOG, RGB_SAI,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------------------------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------'
+ )
+};
+
+static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+
+ pressed ? layer_on(layer1) : layer_off(layer1);
+ IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
+ break;
+ case KANJI:
+ if (record->event.pressed) {
+ if (keymap_config.swap_lalt_lgui == false) {
+ register_code(KC_LANG2);
+ } else {
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md b/keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md
new file mode 100644
index 000000000..2f9f3802d
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_nafuda/readme.md
@@ -0,0 +1,39 @@
+# The salicylic_with_nafuda keymap for naked48
+
+Add Nafuda maps to the salicylic layout.
+
+Default
+ //|--------------------|
+ Mouse,
+ //|------+------+------|
+ BS + Ad, UP,Browser,
+ //|------+------+------|
+ LEFT, DOWN, RIGHT
+ //|--------------------|
+
+Mouse
+ //|--------------------|
+ Default,
+ //|------+------+------|
+ BTN1, MS_U, BTN2,
+ //|------+------+------|
+ MS_L, MS_D, MS_R
+ //|--------------------|
+
+Browser
+ //|--------------------|
+ CloseTAB,
+ //|------+------+------|
+ ReOpenTAB, WH_U,Default,
+ //|------+------+------|
+ LTAB, WH_D, RTAB
+ //|--------------------|
+
+Adjust
+ //|------------------------|
+ LED VAD,
+ //|------+----------+------|
+ Default, LED HUD,LED VAI,
+ //|------+----------+------|
+ LED MOD,LED ON/Off,LED HUI
+ //|------------------------|
diff --git a/keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk b/keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk
new file mode 100644
index 000000000..dd471767a
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_nafuda/rules.mk
@@ -0,0 +1,29 @@
+
+# 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 = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# If your custom naked48 pcb, you can rewrite to yes.
+LED_ANIMATIONS = yes # LED animations
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/config.h b/keyboards/naked48/keymaps/salicylic_with_setta21/config.h
new file mode 100644
index 000000000..ad417f7f0
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_setta21/config.h
@@ -0,0 +1,41 @@
+/* Copyright 2018 Salicylic_acid3
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 180
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_ANIMATIONS)
+ //#define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ //#define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+ //#define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ //#define RGBLIGHT_EFFECT_RGB_TEST
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif \ No newline at end of file
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c b/keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c
new file mode 100644
index 000000000..18293e63e
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_setta21/keymap.c
@@ -0,0 +1,187 @@
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ KANJI,
+ RGBRST,
+ SEND_SUM,
+ SEND_AVERAGE,
+ SEND_COUNTIF,
+ SEND_MAX,
+ SEND_MIN
+};
+
+// Fillers to make layering more clear
+#define _____ KC_TRNS
+#define XXXXX KC_NO
+
+#define KC_CT11 LCTL_T(KC_F11)
+#define KC_SF12 SFT_T(KC_F12)
+#define KC_LOEN LT(_LOWER, KC_ENT)
+#define KC_RASP LT(_RAISE, KC_SPC)
+
+#define KC_SSUM SEND_SUM
+#define KC_SAVE SEND_AVERAGE
+#define KC_SCOU SEND_COUNTIF
+#define KC_SMAX SEND_MAX
+#define KC_SMIN SEND_MIN
+
+#define KC_RADO LT(_RAISE, KC_PDOT)
+#define KC_LOP0 LT(_LOWER, KC_P0)
+#define KC_ADNL LT(_ADJUST, KC_NLCK)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_with_setta21(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, KC_LOP0, KC_P1, KC_P4, KC_P7,KC_ADNL, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_RBRC, KC_P2, KC_P5, KC_P8,KC_PSLS, KC_F2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_RADO, KC_P3, KC_P6, KC_P9,KC_PAST, JP_EQL,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ KC_LEFT,KC_RIGHT, KC_LGUI, KC_MHEN, KC_LOEN, KC_BSPC, KC_DEL, KC_RASP, KC_HENK, KC_LALT, KC_DOWN, KC_UP, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ ),
+
+ [_LOWER] = LAYOUT_with_setta21(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ KC_ESC, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_6, KC_7, KC_8, KC_9, JP_ASTR, JP_SLSH, LOWER, XXXXX,KC_LEFT, XXXXX, XXXXX, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXX, KC_4, KC_5, KC_6, JP_MINS, JP_EQL, KC_DOWN,KC_DOWN, KC_UP,KC_PSLS, KC_F2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_0, KC_1, KC_2, KC_3, JP_PLUS, KC_ENT, RAISE, XXXXX,KC_RIGHT, XXXXX,KC_PAST, JP_EQL,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ _____, _____, _____, KC_ZKHK, LOWER, _____, _____, RAISE, KC_0, JP_DOT, _____, _____, KC_PENT, KC_PPLS,KC_PMNS, KC_DEL
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ ),
+
+ [_RAISE] = LAYOUT_with_setta21(
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, XXXXX, KC_UP, XXXXX, KC_PGUP, KC_DEL, LOWER, KC_F11, KC_F4, KC_F7,KC_SMIN, KC_ESC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ KC_CT11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, KC_LSFT, KC_ENT, KC_F12, KC_F5, KC_F8,KC_SMAX, KC_F2,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ KC_SF12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXX, XXXXX, XXXXX, XXXXX, KC_PGDN, XXXXX, RAISE, KC_F3, KC_F6, KC_F9,KC_SCOU, JP_EQL,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, JP_RPRN, KC_SSUM,KC_SAVE, KC_DEL
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ ),
+
+ [_ADJUST] = LAYOUT_with_setta21( /* Base */
+ //,-----------------------------------------------------| |-----------------------------------------------------. |-----------------------------------------------|
+ _____, _____, _____, _____, _____, _____, _____, KC_7, KC_8, KC_9, KC_0, _____, LOWER,RGB_VAD,RGB_HUD,RGB_SAD, ADJUST,RGB_TOG,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ _____, _____, _____, _____, _____, _____, RGB_TOG, RGB_MOD, XXXXX,LCA(KC_DEL),LALT(KC_PSCR),KC_PSCR, RGB_VAI,RGB_HUI,RGB_SAI, XXXXX, _____,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| |-------+-------+-------+-------+-------+-------|
+ _____, _____, _____, _____, _____, _____, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RAISE, XXXXX, XXXXX, XXXXX, XXXXX, _____,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |---------------+---------------+-------+-------|
+ _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, RGB_MOD, _____, _____, _____
+ //`------------------------------------------------------------------------------------------------------------' |-----------------------------------------------|
+ )
+};
+
+static inline void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+
+ pressed ? layer_on(layer1) : layer_off(layer1);
+ IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3);
+}
+
+int RGB_current_mode;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST);
+ break;
+ case KANJI:
+ if (record->event.pressed) {
+ if (keymap_config.swap_lalt_lgui == false) {
+ register_code(KC_LANG2);
+ } else {
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ break;
+ case SEND_SUM:
+ if (record->event.pressed) {
+ SEND_STRING("_SUM*");
+ }
+ break;
+ case SEND_AVERAGE:
+ if (record->event.pressed) {
+ SEND_STRING("_AVERAGE*");
+ }
+ break;
+ case SEND_COUNTIF:
+ if (record->event.pressed) {
+ SEND_STRING("_COUNTIF*");
+ }
+ break;
+ case SEND_MAX:
+ if (record->event.pressed) {
+ SEND_STRING("_MAX*");
+ }
+ break;
+ case SEND_MIN:
+ if (record->event.pressed) {
+ SEND_STRING("_MIN*");
+ }
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_MOD:
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+}
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/readme.md b/keyboards/naked48/keymaps/salicylic_with_setta21/readme.md
new file mode 100644
index 000000000..fa7ece5d9
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_setta21/readme.md
@@ -0,0 +1,47 @@
+# The salicylic_with_setta21 keymap for naked48
+
+Add Setta21 maps to the salicylic layout.
+
+Default
+ //|-----------------------------------------|
+ Rai+0, 1, 4, 7,Ad+Num, ESC,
+ //|------+------+------+------+------+------|
+ 2, 5, 8, /, F2,
+ //|------+------+------+------+------+------|
+ Low+., 3, 6, 9, *, =,
+ //|-------------+-------------+------+------|
+ ENT, +, -, DEL
+ //|-----------------------------------------|
+
+Lower
+ //|-----------------------------------------|
+ RAISE, F11, F4, F7, "=MIN(", ESC,
+ //|------+------+------+------+-----------+------|
+ F12, F5, F8, "=MAX(", F2,
+ //|------+------+------+------+-----------+------|
+ LOWER, F3, F6, F9,"=COUNTIF(", =,
+ //|-------------+-------------+-----------+------|
+ ), "=SUM(","=AVERAGE(", DEL
+ //|-----------------------------------------|
+
+Raise
+ //|-----------------------------------------|
+ RAISE, XXXXX, LEFT, XXXXX, XXXXX, ESC,
+ //|------+------+------+------+------+------|
+ DOWN, DOWN, UP, /, F2,
+ //|------+------+------+------+------+------|
+ LOWER, XXXXX, RIGHT, XXXXX, *, =,
+ //|-------------+-------------+------+------|
+ ENT, +, -, DEL
+ //|-----------------------------------------|
+
+Adjust
+ //|------------------------------------------------|
+ LED ON/Off,LED VAD,LED HUD,LED SAD, ADJUST, ESC,
+ //|--------+-------+-------+-------+-------+-------|
+ LED VAI,LED HUI,LED SAI, XXXXX, F2,
+ //|--------+-------+-------+-------+-------+-------|
+ XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, =,
+ //|----------------+---------------+-------+-------|
+ LED MOD, +, -, DEL
+ //|------------------------------------------------|
diff --git a/keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk b/keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk
new file mode 100644
index 000000000..ee538432e
--- /dev/null
+++ b/keyboards/naked48/keymaps/salicylic_with_setta21/rules.mk
@@ -0,0 +1,29 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# If your custom naked48 pcb, you can rewrite to yes.
+LED_ANIMATIONS = yes # LED animations
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ # OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/naked48/naked48.c b/keyboards/naked48/naked48.c
new file mode 100644
index 000000000..dbb77f21d
--- /dev/null
+++ b/keyboards/naked48/naked48.c
@@ -0,0 +1 @@
+#include "naked48.h"
diff --git a/keyboards/naked48/naked48.h b/keyboards/naked48/naked48.h
new file mode 100644
index 000000000..891f9301e
--- /dev/null
+++ b/keyboards/naked48/naked48.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#ifdef KEYBOARD_naked48_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
+
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
diff --git a/keyboards/naked48/readme.md b/keyboards/naked48/readme.md
new file mode 100644
index 000000000..a6946d909
--- /dev/null
+++ b/keyboards/naked48/readme.md
@@ -0,0 +1,18 @@
+# naked48
+
+![naked48](https://cdn-ak.f.st-hatena.com/images/fotolife/S/Salicylic_acid3/20190326/20190326015949.jpg)
+
+This is 48 keys modification Ortholinear keyboard.
+
+Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
+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 naked48:default:avrdude
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/naked48led-build-guide)
+[Firmware](https://github.com/Salicylic-acid3/qmk_firmware/tree/master/keyboards/naked48)
diff --git a/keyboards/naked48/rev1/config.h b/keyboards/naked48/rev1/config.h
new file mode 100644
index 000000000..5d1c28d09
--- /dev/null
+++ b/keyboards/naked48/rev1/config.h
@@ -0,0 +1,121 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Salicylic_Acid
+#define PRODUCT naked48
+#define DESCRIPTION Ortholinear 48 Keys Keyboard
+
+/* Use I2C or Serial */
+//#define USE_I2C
+#define USE_SERIAL
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+// OLED support
+// see ./rules.mk: OLED_ENABLE=yes or no
+#ifdef OLED_ENABLE
+ #define SSD1306OLED
+#endif
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 14
+
+// Rows are doubled-up
+#define MATRIX_ROW_PINS { D1, D0, D4, C6 }
+
+// wiring of each half
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D7, E6, B4, B5 }
+// #define MATRIX_COL_PINS { B5, B4, E6, D7, D6, B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+
+// naked48 keyboard RGB LED support
+//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
+// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes
+#define RGBLED_NUM 48
+
+#ifndef IOS_DEVICE_ENABLE
+ #define RGBLIGHT_LIMIT_VAL 180
+ #define RGBLIGHT_VAL_STEP 17
+#else
+ #define RGBLIGHT_LIMIT_VAL 50
+ #define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
+// 120 RGBoff, OLEDoff
+// 120 OLED
+// 330 RGB 6
+// 300 RGB 32
+// 310 OLED & RGB 32
+ #define USB_MAX_POWER_CONSUMPTION 400
+#else
+ // fix iPhone and iPad power adapter issue
+ // iOS device need lessthan 100
+ #define USB_MAX_POWER_CONSUMPTION 100
+#endif
+
+/*
+ * 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/naked48/rev1/matrix.c b/keyboards/naked48/rev1/matrix.c
new file mode 100644
index 000000000..8685a8125
--- /dev/null
+++ b/keyboards/naked48/rev1/matrix.c
@@ -0,0 +1,357 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <avr/io.h>
+#include <avr/wdt.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "pro_micro.h"
+
+#ifdef USE_MATRIX_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# include "split_scomm.h"
+#endif
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+#define ERROR_DISCONNECT_COUNT 5
+
+static uint8_t debouncing = DEBOUNCE;
+static const int ROWS_PER_HAND = MATRIX_ROWS/2;
+static uint8_t error_count = 0;
+uint8_t is_master = 0 ;
+
+static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+static uint8_t matrix_master_scan(void);
+
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ debug_matrix = true;
+ debug_mouse = true;
+ // initialize row and col
+ unselect_rows();
+ init_cols();
+
+ TX_RX_LED_INIT;
+ TXLED0;
+ RXLED0;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ is_master = has_usb();
+
+ matrix_init_quantum();
+}
+
+uint8_t _matrix_scan(void)
+{
+ // Right hand is stored after the left in the matirx so, we need to offset it
+ int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
+
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ select_row(i);
+ _delay_us(30); // without this wait read unstable value.
+ matrix_row_t cols = read_cols();
+ if (matrix_debouncing[i+offset] != cols) {
+ matrix_debouncing[i+offset] = cols;
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ matrix[i+offset] = matrix_debouncing[i+offset];
+ }
+ }
+ }
+
+ return 1;
+}
+
+#ifdef USE_MATRIX_I2C
+
+// Get rows from other half over i2c
+int i2c_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+
+ int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) goto i2c_error;
+
+ // start of matrix stored at 0x00
+ err = i2c_master_write(0x00);
+ if (err) goto i2c_error;
+
+ // Start read
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+ if (err) goto i2c_error;
+
+ if (!err) {
+ int i;
+ for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+ matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
+ }
+ matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
+ i2c_master_stop();
+ } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+ i2c_reset_state();
+ return err;
+ }
+
+ return 0;
+}
+
+#else // USE_SERIAL
+
+int serial_transaction(int master_changed) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+ int ret=serial_update_buffers(master_changed);
+#else
+ int ret=serial_update_buffers();
+#endif
+ if (ret ) {
+ if(ret==2) RXLED1;
+ return 1;
+ }
+ RXLED0;
+ memcpy(&matrix[slaveOffset],
+ (void *)serial_slave_buffer, sizeof(serial_slave_buffer));
+ return 0;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ if (is_master) {
+ matrix_master_scan();
+ }else{
+ matrix_slave_scan();
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+ memcpy(&matrix[offset],
+ (void *)serial_master_buffer, sizeof(serial_master_buffer));
+ matrix_scan_quantum();
+ }
+ return 1;
+}
+
+
+uint8_t matrix_master_scan(void) {
+
+ int ret = _matrix_scan();
+ int mchanged = 1;
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_MATRIX_I2C
+// for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ /* i2c_slave_buffer[i] = matrix[offset+i]; */
+// i2c_slave_buffer[i] = matrix[offset+i];
+// }
+#else // USE_SERIAL
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ mchanged = memcmp((void *)serial_master_buffer,
+ &matrix[offset], sizeof(serial_master_buffer));
+ #endif
+ memcpy((void *)serial_master_buffer,
+ &matrix[offset], sizeof(serial_master_buffer));
+#endif
+
+#ifdef USE_MATRIX_I2C
+ if( i2c_transaction() ) {
+#else // USE_SERIAL
+ if( serial_transaction(mchanged) ) {
+#endif
+ // turn on the indicator led when halves are disconnected
+ TXLED1;
+
+ error_count++;
+
+ if (error_count > ERROR_DISCONNECT_COUNT) {
+ // reset other half if disconnected
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = 0;
+ }
+ }
+ } else {
+ // turn off the indicator led on no error
+ TXLED0;
+ error_count = 0;
+ }
+ matrix_scan_quantum();
+ return ret;
+}
+
+void matrix_slave_scan(void) {
+ _matrix_scan();
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_MATRIX_I2C
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ /* i2c_slave_buffer[i] = matrix[offset+i]; */
+ i2c_slave_buffer[i] = matrix[offset+i];
+ }
+#else // USE_SERIAL
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ int change = 0;
+ #endif
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ if( serial_slave_buffer[i] != matrix[offset+i] )
+ change = 1;
+ #endif
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ slave_buffer_change_count += change;
+ #endif
+#endif
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+static void init_cols(void)
+{
+ for(int x = 0; x < MATRIX_COLS; x++) {
+ _SFR_IO8((col_pins[x] >> 4) + 1) &= ~_BV(col_pins[x] & 0xF);
+ _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF);
+ }
+}
+
+static matrix_row_t read_cols(void)
+{
+ matrix_row_t result = 0;
+ for(int x = 0; x < MATRIX_COLS; x++) {
+ result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
+ }
+ return result;
+}
+
+static void unselect_rows(void)
+{
+ for(int x = 0; x < ROWS_PER_HAND; x++) {
+ _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
+ _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
+ }
+}
+
+static void select_row(uint8_t row)
+{
+ _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF);
+ _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF);
+}
diff --git a/keyboards/naked48/rev1/rev1.c b/keyboards/naked48/rev1/rev1.c
new file mode 100644
index 000000000..b5f6532b2
--- /dev/null
+++ b/keyboards/naked48/rev1/rev1.c
@@ -0,0 +1,15 @@
+#include "naked48.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ //led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/naked48/rev1/rev1.h b/keyboards/naked48/rev1/rev1.h
new file mode 100644
index 000000000..45878dc50
--- /dev/null
+++ b/keyboards/naked48/rev1/rev1.h
@@ -0,0 +1,88 @@
+#pragma once
+
+#include "naked48.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+//////////////////////////////////////////////////////////////////////////////
+// When only use Naked48.
+//////////////////////////////////////////////////////////////////////////////
+/*
+ * ,------------------------------------ ------------------------------------.
+ * | L00 | L01 | L02 | L03 | L04 | L05 | | L06 | L07 | L08 | L09 | L0A | L0B |
+ * |------------------------------------ ------------------------------------+
+ * | L10 | L11 | L12 | L13 | L14 | L15 | | L16 | L17 | L18 | L19 | L1A | L1B |
+ * |------------------------------------ ------------------------------------+
+ * | L20 | L21 | L22 | L23 | L24 | L25 | | L26 | L17 | L28 | L29 | L2A | L2B |
+ * |-----------------------------------------------------------------------------------+
+ * | L30 | L32 | L33 | L34 | L35 | L36 | L37 | L38 | L39 | L3A | L3B | L3D |
+ * |-----------------------------------------------------------------------'
+ */
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, \
+ L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, \
+ L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, \
+ L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B }, \
+ { L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B }, \
+ { L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B }, \
+ { L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
+ }
+
+//////////////////////////////////////////////////////////////////////////////
+// When connecting Setta21 to Naked48.
+//////////////////////////////////////////////////////////////////////////////
+
+#define LAYOUT_with_setta21( \
+ L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B, R30, R32, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B,KC_NO,KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B,KC_NO,KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B,KC_NO,KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B,KC_NO,KC_NO }, \
+ { R00, R01, R02, R03, R04, R05,KC_NO,KC_NO,KC_NO, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25,KC_NO,KC_NO, R30,KC_NO, R32,KC_NO, R34, R35 }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
+ }
+
+//////////////////////////////////////////////////////////////////////////////
+// When connecting Nafuda to Naked48.
+//////////////////////////////////////////////////////////////////////////////
+
+#define LAYOUT_with_nafuda( \
+ L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B, R01, \
+ L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B, R10, R11, R12, \
+ L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B, R20, R21, R22, \
+ L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06, L07, L08, L09, L0A, L0B,KC_NO,KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L1A, L1B,KC_NO,KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, L26, L27, L28, L29, L2A, L2B,KC_NO,KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L3A, L3B,KC_NO,KC_NO }, \
+ {KC_NO, R01,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, R10, R11, R12,KC_NO,KC_NO,KC_NO }, \
+ { R20, R21, R22,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO }, \
+ {KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO } \
+ }
+
diff --git a/keyboards/naked48/rev1/rules.mk b/keyboards/naked48/rev1/rules.mk
new file mode 100644
index 000000000..a71181033
--- /dev/null
+++ b/keyboards/naked48/rev1/rules.mk
@@ -0,0 +1,3 @@
+SRC += matrix.c \
+ split_util.c \
+ split_scomm.c
diff --git a/keyboards/naked48/rev1/serial_config.h b/keyboards/naked48/rev1/serial_config.h
new file mode 100644
index 000000000..37135213d
--- /dev/null
+++ b/keyboards/naked48/rev1/serial_config.h
@@ -0,0 +1,8 @@
+//// #error rev2 serial config
+
+#ifndef SOFT_SERIAL_PIN
+/* Soft Serial defines */
+#define SOFT_SERIAL_PIN D2
+
+#define SERIAL_USE_MULTI_TRANSACTION
+#endif
diff --git a/keyboards/naked48/rev1/serial_config_simpleapi.h b/keyboards/naked48/rev1/serial_config_simpleapi.h
new file mode 100644
index 000000000..e2d22a41e
--- /dev/null
+++ b/keyboards/naked48/rev1/serial_config_simpleapi.h
@@ -0,0 +1,8 @@
+#ifndef SERIAL_CONFIG_SIMPLEAPI_H
+#define SERIAL_CONFIG_SIMPLEAPI_H
+
+#undef SERIAL_USE_MULTI_TRANSACTION
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+#endif // SERIAL_CONFIG_SIMPLEAPI_H
diff --git a/keyboards/naked48/rev1/split_scomm.c b/keyboards/naked48/rev1/split_scomm.c
new file mode 100644
index 000000000..ada786796
--- /dev/null
+++ b/keyboards/naked48/rev1/split_scomm.c
@@ -0,0 +1,92 @@
+#ifdef USE_SERIAL
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE flexible API (using multi-type transaction function) --- */
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <split_scomm.h>
+#include "serial.h"
+#ifdef CONSOLE_ENABLE
+ #include <print.h>
+#endif
+
+uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+uint8_t volatile status_com = 0;
+uint8_t volatile status1 = 0;
+uint8_t slave_buffer_change_count = 0;
+uint8_t s_change_old = 0xff;
+uint8_t s_change_new = 0xff;
+
+SSTD_t transactions[] = {
+#define GET_SLAVE_STATUS 0
+ /* master buffer not changed, only recive slave_buffer_change_count */
+ { (uint8_t *)&status_com,
+ 0, NULL,
+ sizeof(slave_buffer_change_count), &slave_buffer_change_count,
+ },
+#define PUT_MASTER_GET_SLAVE_STATUS 1
+ /* master buffer changed need send, and recive slave_buffer_change_count */
+ { (uint8_t *)&status_com,
+ sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
+ sizeof(slave_buffer_change_count), &slave_buffer_change_count,
+ },
+#define GET_SLAVE_BUFFER 2
+ /* recive serial_slave_buffer */
+ { (uint8_t *)&status1,
+ 0, NULL,
+ sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
+ }
+};
+
+void serial_master_init(void)
+{
+ soft_serial_initiator_init(transactions, TID_LIMIT(transactions));
+}
+
+void serial_slave_init(void)
+{
+ soft_serial_target_init(transactions, TID_LIMIT(transactions));
+}
+
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers(int master_update)
+{
+ int status, smatstatus;
+ static int need_retry = 0;
+
+ if( s_change_old != s_change_new ) {
+ smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER);
+ if( smatstatus == TRANSACTION_END ) {
+ s_change_old = s_change_new;
+#ifdef CONSOLE_ENABLE
+ uprintf("slave matrix = %b %b %b %b %b\n",
+ serial_slave_buffer[0], serial_slave_buffer[1],
+ serial_slave_buffer[2], serial_slave_buffer[3],
+ serial_slave_buffer[4] );
+#endif
+ }
+ } else {
+ // serial_slave_buffer dosen't change
+ smatstatus = TRANSACTION_END; // dummy status
+ }
+
+ if( !master_update && !need_retry) {
+ status = soft_serial_transaction(GET_SLAVE_STATUS);
+ } else {
+ status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
+ }
+ if( status == TRANSACTION_END ) {
+ s_change_new = slave_buffer_change_count;
+ need_retry = 0;
+ } else {
+ need_retry = 1;
+ }
+ return smatstatus;
+}
+
+#endif // SERIAL_USE_MULTI_TRANSACTION
+#endif /* USE_SERIAL */
diff --git a/keyboards/naked48/rev1/split_scomm.h b/keyboards/naked48/rev1/split_scomm.h
new file mode 100644
index 000000000..537ec4080
--- /dev/null
+++ b/keyboards/naked48/rev1/split_scomm.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
+#include "serial.h"
+
+#else
+/* --- USE flexible API (using multi-type transaction function) --- */
+// Buffers for master - slave communication
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+extern uint8_t slave_buffer_change_count;
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(int master_changed);
+
+#endif
+
diff --git a/keyboards/naked48/rev1/split_util.c b/keyboards/naked48/rev1/split_util.c
new file mode 100644
index 000000000..e1ff8b437
--- /dev/null
+++ b/keyboards/naked48/rev1/split_util.c
@@ -0,0 +1,70 @@
+#include <avr/io.h>
+#include <avr/wdt.h>
+#include <avr/power.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/eeprom.h>
+#include "split_util.h"
+#include "matrix.h"
+#include "keyboard.h"
+
+#ifdef USE_MATRIX_I2C
+# include "i2c.h"
+#else
+# include "split_scomm.h"
+#endif
+
+volatile bool isLeftHand = true;
+
+static void setup_handedness(void) {
+ #ifdef EE_HANDS
+ isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
+ #else
+ // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c
+ #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT)
+ isLeftHand = !has_usb();
+ #else
+ isLeftHand = has_usb();
+ #endif
+ #endif
+}
+
+static void keyboard_master_setup(void) {
+
+#ifdef USE_MATRIX_I2C
+ i2c_master_init();
+#else
+ serial_master_init();
+#endif
+}
+
+static void keyboard_slave_setup(void) {
+
+#ifdef USE_MATRIX_I2C
+ i2c_slave_init(SLAVE_I2C_ADDRESS);
+#else
+ serial_slave_init();
+#endif
+}
+
+bool has_usb(void) {
+ USBCON |= (1 << OTGPADE); //enables VBUS pad
+ _delay_us(5);
+ return (USBSTA & (1<<VBUS)); //checks state of VBUS
+}
+
+void split_keyboard_setup(void) {
+ setup_handedness();
+
+ if (has_usb()) {
+ keyboard_master_setup();
+ } else {
+ keyboard_slave_setup();
+ }
+ sei();
+}
+
+// this code runs before the usb and keyboard is initialized
+void matrix_setup(void) {
+ split_keyboard_setup();
+}
diff --git a/keyboards/naked48/rev1/split_util.h b/keyboards/naked48/rev1/split_util.h
new file mode 100644
index 000000000..f59304756
--- /dev/null
+++ b/keyboards/naked48/rev1/split_util.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
diff --git a/keyboards/naked48/rules.mk b/keyboards/naked48/rules.mk
new file mode 100644
index 000000000..02a7d9ab2
--- /dev/null
+++ b/keyboards/naked48/rules.mk
@@ -0,0 +1,73 @@
+# SRC += i2c.c
+QUANTUM_LIB_SRC += serial.c
+# SRC += ssd1306.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SUBPROJECT_rev1 = no
+USE_I2C = no
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CUSTOM_MATRIX = yes
+
+DEFAULT_FOLDER = naked48/rev1
diff --git a/keyboards/naked48/serial.c b/keyboards/naked48/serial.c
new file mode 100644
index 000000000..6006ebf1b
--- /dev/null
+++ b/keyboards/naked48/serial.c
@@ -0,0 +1,590 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ *
+ * 2018-10-28 checked
+ * avr-gcc 4.9.2
+ * avr-gcc 5.4.0
+ * avr-gcc 7.3.0
+ */
+
+#ifndef F_CPU
+#define F_CPU 16000000
+#endif
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "serial.h"
+//#include <pro_micro.h>
+
+#ifdef SOFT_SERIAL_PIN
+
+#ifdef __AVR_ATmega32U4__
+ // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
+ #ifdef USE_I2C
+ #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
+ #error Using ATmega32U4 I2C, so can not use PD0, PD1
+ #endif
+ #endif
+
+ #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
+ #define SERIAL_PIN_DDR DDRD
+ #define SERIAL_PIN_PORT PORTD
+ #define SERIAL_PIN_INPUT PIND
+ #if SOFT_SERIAL_PIN == D0
+ #define SERIAL_PIN_MASK _BV(PD0)
+ #define EIMSK_BIT _BV(INT0)
+ #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
+ #define SERIAL_PIN_INTERRUPT INT0_vect
+ #elif SOFT_SERIAL_PIN == D1
+ #define SERIAL_PIN_MASK _BV(PD1)
+ #define EIMSK_BIT _BV(INT1)
+ #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
+ #define SERIAL_PIN_INTERRUPT INT1_vect
+ #elif SOFT_SERIAL_PIN == D2
+ #define SERIAL_PIN_MASK _BV(PD2)
+ #define EIMSK_BIT _BV(INT2)
+ #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
+ #define SERIAL_PIN_INTERRUPT INT2_vect
+ #elif SOFT_SERIAL_PIN == D3
+ #define SERIAL_PIN_MASK _BV(PD3)
+ #define EIMSK_BIT _BV(INT3)
+ #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
+ #define SERIAL_PIN_INTERRUPT INT3_vect
+ #endif
+ #elif SOFT_SERIAL_PIN == E6
+ #define SERIAL_PIN_DDR DDRE
+ #define SERIAL_PIN_PORT PORTE
+ #define SERIAL_PIN_INPUT PINE
+ #define SERIAL_PIN_MASK _BV(PE6)
+ #define EIMSK_BIT _BV(INT6)
+ #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
+ #define SERIAL_PIN_INTERRUPT INT6_vect
+ #else
+ #error invalid SOFT_SERIAL_PIN value
+ #endif
+
+#else
+ #error serial.c now support ATmega32U4 only
+#endif
+
+//////////////// for backward compatibility ////////////////////////////////
+#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
+/* --- USE OLD API (compatible with let's split serial.c) */
+ #if SERIAL_SLAVE_BUFFER_LENGTH > 0
+ uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+ #endif
+ #if SERIAL_MASTER_BUFFER_LENGTH > 0
+ uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+ #endif
+ uint8_t volatile status0 = 0;
+
+SSTD_t transactions[] = {
+ { (uint8_t *)&status0,
+ #if SERIAL_MASTER_BUFFER_LENGTH > 0
+ sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
+ #else
+ 0, (uint8_t *)NULL,
+ #endif
+ #if SERIAL_SLAVE_BUFFER_LENGTH > 0
+ sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
+ #else
+ 0, (uint8_t *)NULL,
+ #endif
+ }
+};
+
+void serial_master_init(void)
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
+
+void serial_slave_init(void)
+{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
+
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers()
+{
+ int result;
+ result = soft_serial_transaction();
+ return result;
+}
+
+#endif // end of OLD API (compatible with let's split serial.c)
+////////////////////////////////////////////////////////////////////////////
+
+#define ALWAYS_INLINE __attribute__((always_inline))
+#define NO_INLINE __attribute__((noinline))
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// parity check
+#define ODD_PARITY 1
+#define EVEN_PARITY 0
+#define PARITY EVEN_PARITY
+
+#ifdef SERIAL_DELAY
+ // custom setup in config.h
+ // #define TID_SEND_ADJUST 2
+ // #define SERIAL_DELAY 6 // micro sec
+ // #define READ_WRITE_START_ADJUST 30 // cycles
+ // #define READ_WRITE_WIDTH_ADJUST 8 // cycles
+#else
+// ============ Standard setups ============
+
+#ifndef SELECT_SOFT_SERIAL_SPEED
+#define SELECT_SOFT_SERIAL_SPEED 1
+// 0: about 189kbps
+// 1: about 137kbps (default)
+// 2: about 75kbps
+// 3: about 39kbps
+// 4: about 26kbps
+// 5: about 20kbps
+#endif
+
+#if __GNUC__ < 6
+ #define TID_SEND_ADJUST 14
+#else
+ #define TID_SEND_ADJUST 2
+#endif
+
+#if SELECT_SOFT_SERIAL_SPEED == 0
+ // Very High speed
+ #define SERIAL_DELAY 4 // micro sec
+ #if __GNUC__ < 6
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_START_ADJUST 34 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 1
+ // High speed
+ #define SERIAL_DELAY 6 // micro sec
+ #if __GNUC__ < 6
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 2
+ // Middle speed
+ #define SERIAL_DELAY 12 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 3
+ // Low speed
+ #define SERIAL_DELAY 24 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 4
+ // Very Low speed
+ #define SERIAL_DELAY 36 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 5
+ // Ultra Low speed
+ #define SERIAL_DELAY 48 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #if __GNUC__ < 6
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#else
+#error invalid SELECT_SOFT_SERIAL_SPEED value
+#endif /* SELECT_SOFT_SERIAL_SPEED */
+#endif /* SERIAL_DELAY */
+
+#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
+#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
+
+#define SLAVE_INT_WIDTH_US 1
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+ #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
+#else
+ #define SLAVE_INT_ACK_WIDTH_UNIT 2
+ #define SLAVE_INT_ACK_WIDTH 4
+#endif
+
+static SSTD_t *Transaction_table = NULL;
+static uint8_t Transaction_table_size = 0;
+
+inline static void serial_delay(void) ALWAYS_INLINE;
+inline static
+void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
+
+inline static void serial_delay_half1(void) ALWAYS_INLINE;
+inline static
+void serial_delay_half1(void) {
+ _delay_us(SERIAL_DELAY_HALF1);
+}
+
+inline static void serial_delay_half2(void) ALWAYS_INLINE;
+inline static
+void serial_delay_half2(void) {
+ _delay_us(SERIAL_DELAY_HALF2);
+}
+
+inline static void serial_output(void) ALWAYS_INLINE;
+inline static
+void serial_output(void) {
+ SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
+}
+
+// make the serial pin an input with pull-up resistor
+inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
+inline static
+void serial_input_with_pullup(void) {
+ SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
+inline static
+uint8_t serial_read_pin(void) {
+ return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
+}
+
+inline static void serial_low(void) ALWAYS_INLINE;
+inline static
+void serial_low(void) {
+ SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static void serial_high(void) ALWAYS_INLINE;
+inline static
+void serial_high(void) {
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
+{
+ Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
+ serial_output();
+ serial_high();
+}
+
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
+{
+ Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
+ serial_input_with_pullup();
+
+ // Enable INT0-INT3,INT6
+ EIMSK |= EIMSK_BIT;
+#if SERIAL_PIN_MASK == _BV(PE6)
+ // Trigger on falling edge of INT6
+ EICRB &= EICRx_BIT;
+#else
+ // Trigger on falling edge of INT0-INT3
+ EICRA &= EICRx_BIT;
+#endif
+}
+
+// Used by the sender to synchronize timing with the reciver.
+static void sync_recv(void) NO_INLINE;
+static
+void sync_recv(void) {
+ for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
+ }
+ // This shouldn't hang if the target disconnects because the
+ // serial line will float to high if the target does disconnect.
+ while (!serial_read_pin());
+}
+
+// Used by the reciver to send a synchronization signal to the sender.
+static void sync_send(void) NO_INLINE;
+static
+void sync_send(void) {
+ serial_low();
+ serial_delay();
+ serial_high();
+}
+
+// Reads a byte from the serial line
+static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE;
+static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
+ uint8_t byte, i, p, pb;
+
+ _delay_sub_us(READ_WRITE_START_ADJUST);
+ for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) {
+ serial_delay_half1(); // read the middle of pulses
+ if( serial_read_pin() ) {
+ byte = (byte << 1) | 1; p ^= 1;
+ } else {
+ byte = (byte << 1) | 0; p ^= 0;
+ }
+ _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+ serial_delay_half2();
+ }
+ /* recive parity bit */
+ serial_delay_half1(); // read the middle of pulses
+ pb = serial_read_pin();
+ _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+ serial_delay_half2();
+
+ *pterrcount += (p != pb)? 1 : 0;
+
+ return byte;
+}
+
+// Sends a byte with MSB ordering
+void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE;
+void serial_write_chunk(uint8_t data, uint8_t bit) {
+ uint8_t b, p;
+ for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) {
+ if(data & b) {
+ serial_high(); p ^= 1;
+ } else {
+ serial_low(); p ^= 0;
+ }
+ serial_delay();
+ }
+ /* send parity bit */
+ if(p & 1) { serial_high(); }
+ else { serial_low(); }
+ serial_delay();
+
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
+
+static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
+static
+void serial_send_packet(uint8_t *buffer, uint8_t size) {
+ for (uint8_t i = 0; i < size; ++i) {
+ uint8_t data;
+ data = buffer[i];
+ sync_send();
+ serial_write_chunk(data,8);
+ }
+}
+
+static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
+static
+uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
+ uint8_t pecount = 0;
+ for (uint8_t i = 0; i < size; ++i) {
+ uint8_t data;
+ sync_recv();
+ data = serial_read_chunk(&pecount, 8);
+ buffer[i] = data;
+ }
+ return pecount == 0;
+}
+
+inline static
+void change_sender2reciver(void) {
+ sync_send(); //0
+ serial_delay_half1(); //1
+ serial_low(); //2
+ serial_input_with_pullup(); //2
+ serial_delay_half1(); //3
+}
+
+inline static
+void change_reciver2sender(void) {
+ sync_recv(); //0
+ serial_delay(); //1
+ serial_low(); //3
+ serial_output(); //3
+ serial_delay_half1(); //4
+}
+
+static inline uint8_t nibble_bits_count(uint8_t bits)
+{
+ bits = (bits & 0x5) + (bits >> 1 & 0x5);
+ bits = (bits & 0x3) + (bits >> 2 & 0x3);
+ return bits;
+}
+
+// interrupt handle to be used by the target device
+ISR(SERIAL_PIN_INTERRUPT) {
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+ serial_low();
+ serial_output();
+ SSTD_t *trans = Transaction_table;
+#else
+ // recive transaction table index
+ uint8_t tid, bits;
+ uint8_t pecount = 0;
+ sync_recv();
+ bits = serial_read_chunk(&pecount,7);
+ tid = bits>>3;
+ bits = (bits&7) != nibble_bits_count(tid);
+ if( bits || pecount> 0 || tid > Transaction_table_size ) {
+ return;
+ }
+ serial_delay_half1();
+
+ serial_high(); // response step1 low->high
+ serial_output();
+ _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH);
+ SSTD_t *trans = &Transaction_table[tid];
+ serial_low(); // response step2 ack high->low
+#endif
+
+ // target send phase
+ if( trans->target2initiator_buffer_size > 0 )
+ serial_send_packet((uint8_t *)trans->target2initiator_buffer,
+ trans->target2initiator_buffer_size);
+ // target switch to input
+ change_sender2reciver();
+
+ // target recive phase
+ if( trans->initiator2target_buffer_size > 0 ) {
+ if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer,
+ trans->initiator2target_buffer_size) ) {
+ *trans->status = TRANSACTION_ACCEPTED;
+ } else {
+ *trans->status = TRANSACTION_DATA_ERROR;
+ }
+ } else {
+ *trans->status = TRANSACTION_ACCEPTED;
+ }
+
+ sync_recv(); //weit initiator output to high
+}
+
+/////////
+// start transaction by initiator
+//
+// int soft_serial_transaction(int sstd_index)
+//
+// Returns:
+// TRANSACTION_END
+// TRANSACTION_NO_RESPONSE
+// TRANSACTION_DATA_ERROR
+// this code is very time dependent, so we need to disable interrupts
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_transaction(void) {
+ SSTD_t *trans = Transaction_table;
+#else
+int soft_serial_transaction(int sstd_index) {
+ if( sstd_index > Transaction_table_size )
+ return TRANSACTION_TYPE_ERROR;
+ SSTD_t *trans = &Transaction_table[sstd_index];
+#endif
+ cli();
+
+ // signal to the target that we want to start a transaction
+ serial_output();
+ serial_low();
+ _delay_us(SLAVE_INT_WIDTH_US);
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+ // wait for the target response
+ serial_input_with_pullup();
+ _delay_us(SLAVE_INT_RESPONSE_TIME);
+
+ // check if the target is present
+ if (serial_read_pin()) {
+ // target failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_NO_RESPONSE;
+ sei();
+ return TRANSACTION_NO_RESPONSE;
+ }
+
+#else
+ // send transaction table index
+ int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index));
+ sync_send();
+ _delay_sub_us(TID_SEND_ADJUST);
+ serial_write_chunk(tid, 7);
+ serial_delay_half1();
+
+ // wait for the target response (step1 low->high)
+ serial_input_with_pullup();
+ while( !serial_read_pin() ) {
+ _delay_sub_us(2);
+ }
+
+ // check if the target is present (step2 high->low)
+ for( int i = 0; serial_read_pin(); i++ ) {
+ if (i > SLAVE_INT_ACK_WIDTH + 1) {
+ // slave failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_NO_RESPONSE;
+ sei();
+ return TRANSACTION_NO_RESPONSE;
+ }
+ _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
+ }
+#endif
+
+ // initiator recive phase
+ // if the target is present syncronize with it
+ if( trans->target2initiator_buffer_size > 0 ) {
+ if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer,
+ trans->target2initiator_buffer_size) ) {
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_DATA_ERROR;
+ sei();
+ return TRANSACTION_DATA_ERROR;
+ }
+ }
+
+ // initiator switch to output
+ change_reciver2sender();
+
+ // initiator send phase
+ if( trans->initiator2target_buffer_size > 0 ) {
+ serial_send_packet((uint8_t *)trans->initiator2target_buffer,
+ trans->initiator2target_buffer_size);
+ }
+
+ // always, release the line when not in use
+ sync_send();
+
+ *trans->status = TRANSACTION_END;
+ sei();
+ return TRANSACTION_END;
+}
+
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_get_and_clean_status(int sstd_index) {
+ SSTD_t *trans = &Transaction_table[sstd_index];
+ cli();
+ int retval = *trans->status;
+ *trans->status = 0;;
+ sei();
+ return retval;
+}
+#endif
+
+#endif
+
+// Helix serial.c history
+// 2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc)
+// 2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4)
+// (adjusted with avr-gcc 4.9.2)
+// 2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78)
+// (adjusted with avr-gcc 4.9.2)
+// 2018-8-11 add support multi-type transaction (#3608, feb5e4aae)
+// (adjusted with avr-gcc 4.9.2)
+// 2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff)
+// (adjusted with avr-gcc 7.3.0)
+// 2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66)
+// (adjusted with avr-gcc 5.4.0, 7.3.0)
diff --git a/keyboards/naked48/serial.h b/keyboards/naked48/serial.h
new file mode 100644
index 000000000..5deaf789e
--- /dev/null
+++ b/keyboards/naked48/serial.h
@@ -0,0 +1,86 @@
+#pragma once
+
+#include <stdbool.h>
+
+// /////////////////////////////////////////////////////////////////
+// Need Soft Serial defines in config.h
+// /////////////////////////////////////////////////////////////////
+// ex.
+// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
+// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
+// // 1: about 137kbps (default)
+// // 2: about 75kbps
+// // 3: about 39kbps
+// // 4: about 26kbps
+// // 5: about 20kbps
+//
+// //// USE OLD API (compatible with let's split serial.c)
+// ex.
+// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+// #define SERIAL_MASTER_BUFFER_LENGTH 1
+//
+// //// USE NEW API
+// //// USE simple API (using signle-type transaction function)
+// #define SERIAL_USE_SINGLE_TRANSACTION
+// //// USE flexible API (using multi-type transaction function)
+// #define SERIAL_USE_MULTI_TRANSACTION
+//
+// /////////////////////////////////////////////////////////////////
+
+
+//////////////// for backward compatibility ////////////////////////////////
+#if !defined(SERIAL_USE_SINGLE_TRANSACTION) && !defined(SERIAL_USE_MULTI_TRANSACTION)
+/* --- USE OLD API (compatible with let's split serial.c) */
+ #if SERIAL_SLAVE_BUFFER_LENGTH > 0
+ extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+ #endif
+ #if SERIAL_MASTER_BUFFER_LENGTH > 0
+ extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+ #endif
+
+ void serial_master_init(void);
+ void serial_slave_init(void);
+ int serial_update_buffers(void);
+
+#endif // end of USE OLD API
+////////////////////////////////////////////////////////////////////////////
+
+// Soft Serial Transaction Descriptor
+typedef struct _SSTD_t {
+ uint8_t *status;
+ uint8_t initiator2target_buffer_size;
+ uint8_t *initiator2target_buffer;
+ uint8_t target2initiator_buffer_size;
+ uint8_t *target2initiator_buffer;
+} SSTD_t;
+#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t))
+
+// initiator is transaction start side
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
+// target is interrupt accept side
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
+
+// initiator resullt
+#define TRANSACTION_END 0
+#define TRANSACTION_NO_RESPONSE 0x1
+#define TRANSACTION_DATA_ERROR 0x2
+#define TRANSACTION_TYPE_ERROR 0x4
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_transaction(void);
+#else
+int soft_serial_transaction(int sstd_index);
+#endif
+
+// target status
+// *SSTD_t.status has
+// initiator:
+// TRANSACTION_END
+// or TRANSACTION_NO_RESPONSE
+// or TRANSACTION_DATA_ERROR
+// target:
+// TRANSACTION_DATA_ERROR
+// or TRANSACTION_ACCEPTED
+#define TRANSACTION_ACCEPTED 0x8
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_get_and_clean_status(int sstd_index);
+#endif
diff --git a/keyboards/namecard2x4/rev1/rules.mk b/keyboards/namecard2x4/rev1/rules.mk
index 51d2cbcb2..407298e90 100644
--- a/keyboards/namecard2x4/rev1/rules.mk
+++ b/keyboards/namecard2x4/rev1/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/namecard2x4/rev2/rules.mk b/keyboards/namecard2x4/rev2/rules.mk
index 51d2cbcb2..407298e90 100644
--- a/keyboards/namecard2x4/rev2/rules.mk
+++ b/keyboards/namecard2x4/rev2/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/nek_type_a/config.h b/keyboards/nek_type_a/config.h
index 5b105804d..98a954dd1 100644
--- a/keyboards/nek_type_a/config.h
+++ b/keyboards/nek_type_a/config.h
@@ -46,8 +46,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
diff --git a/keyboards/nek_type_a/info.json b/keyboards/nek_type_a/info.json
index e69de29bb..7387fe27f 100644
--- a/keyboards/nek_type_a/info.json
+++ b/keyboards/nek_type_a/info.json
@@ -0,0 +1,101 @@
+{
+ "keyboard_name": "NEK Type A",
+ "url": "",
+ "maintainer": "ecopoesis",
+ "width": 19.75,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0.5, "y":0, "w":1.75},
+ {"label":"F1", "x":2.75, "y":0},
+ {"label":"F2", "x":3.75, "y":0},
+ {"label":"F3", "x":4.75, "y":0},
+ {"label":"F4", "x":5.75, "y":0},
+ {"label":"F5", "x":8.25, "y":0},
+ {"label":"F6", "x":9.25, "y":0},
+ {"label":"F7", "x":10.25, "y":0},
+ {"label":"F8", "x":11.25, "y":0},
+ {"label":"F9", "x":12.5, "y":0},
+ {"label":"F10", "x":13.5, "y":0},
+ {"label":"F11", "x":14.5, "y":0},
+ {"label":"F12", "x":15.5, "y":0},
+ {"label":"Mute", "x":16.75, "y":0},
+ {"label":"Volume Down", "x":17.75, "y":0},
+ {"label":"Volume Up", "x":18.75, "y":0},
+ {"label":"`", "x":0, "y":1.25},
+ {"label":"1", "x":1, "y":1.25},
+ {"label":"2", "x":2, "y":1.25},
+ {"label":"3", "x":3, "y":1.25},
+ {"label":"4", "x":4, "y":1.25},
+ {"label":"5", "x":5, "y":1.25},
+ {"label":"6", "x":6, "y":1.25},
+ {"label":"7", "x":8, "y":1.25, "w":1.5},
+ {"label":"8", "x":9.5, "y":1.25},
+ {"label":"9", "x":10.5, "y":1.25},
+ {"label":"0", "x":11.5, "y":1.25},
+ {"label":"-", "x":12.5, "y":1.25},
+ {"label":"=", "x":13.5, "y":1.25},
+ {"label":"Backspace", "x":14.5, "y":1.25, "w":2},
+ {"label":"Insert", "x":16.75, "y":1.25},
+ {"label":"Home", "x":17.75, "y":1.25},
+ {"label":"Page Up", "x":18.75, "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, "w":1.5},
+ {"label":"Y", "x":8, "y":2.25},
+ {"label":"U", "x":9, "y":2.25},
+ {"label":"I", "x":10, "y":2.25},
+ {"label":"O", "x":11, "y":2.25},
+ {"label":"P", "x":12, "y":2.25},
+ {"label":"[", "x":13, "y":2.25},
+ {"label":"]", "x":14, "y":2.25},
+ {"label":"\\", "x":15, "y":2.25, "w":1.5},
+ {"label":"Delete", "x":16.75, "y":2.25},
+ {"label":"End", "x":17.75, "y":2.25},
+ {"label":"Page Down", "x":18.75, "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, "w":1.25},
+ {"label":"H", "x":8, "y":3.25, "w":1.25},
+ {"label":"J", "x":9.25, "y":3.25},
+ {"label":"K", "x":10.25, "y":3.25},
+ {"label":"L", "x":11.25, "y":3.25},
+ {"label":";", "x":12.25, "y":3.25},
+ {"label":"'", "x":13.25, "y":3.25},
+ {"label":"Enter", "x":14.25, "y":3.25, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.25, "w":2},
+ {"label":"Z", "x":2, "y":4.25},
+ {"label":"X", "x":3, "y":4.25},
+ {"label":"C", "x":4, "y":4.25},
+ {"label":"V", "x":5, "y":4.25},
+ {"label":"B", "x":6, "y":4.25},
+ {"label":"N", "x":8, "y":4.25, "w":1.5},
+ {"label":"M", "x":9.5, "y":4.25},
+ {"label":",", "x":10.5, "y":4.25},
+ {"label":".", "x":11.5, "y":4.25},
+ {"label":"/", "x":12.5, "y":4.25},
+ {"label":"Shift", "x":13.5, "y":4.25, "w":2.75},
+ {"label":"Up", "x":17.75, "y":3.75},
+ {"label":"Ctrl", "x":0, "y":5.25, "w":1.5},
+ {"label":"Alt", "x":1.5, "y":5.25, "w":1.25},
+ {"label":"Cmd", "x":2.75, "y":5.25, "w":1.5},
+ {"label":"Space", "x":4.25, "y":5.25, "w":2.75},
+ {"label":"Space", "x":8, "y":5.25, "w":2.75},
+ {"label":"Cmd", "x":10.75, "y":5.25, "w":1.5},
+ {"label":"Alt", "x":12.25, "y":5.25, "w":1.25},
+ {"label":"Ctrl", "x":13.5, "y":5.25, "w":1.5},
+ {"label":"Menu", "x":15, "y":5.25, "w":1.25},
+ {"label":"Left", "x":16.75, "y":4.75},
+ {"label":"Down", "x":17.75, "y":4.75},
+ {"label":"Right", "x":18.75, "y":4.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/newgame40/rules.mk b/keyboards/newgame40/rules.mk
index cca40ce8e..e92cde758 100644
--- a/keyboards/newgame40/rules.mk
+++ b/keyboards/newgame40/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/niu_mini/keymaps/tucznak/config.h b/keyboards/niu_mini/keymaps/tucznak/config.h
new file mode 100644
index 000000000..5d8842ee2
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/tucznak/config.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#undef MANUFACTURER
+#undef PRODUCT
+#undef DESCRIPTION
+
+#define MANUFACTURER Potato Inc.
+#define PRODUCT Qt3.14
+#define DESCRIPTION Look, a keyboard!
+
+/* turn off RGB when computer sleeps */
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_SLEEP
+#endif
+
+/* send tap key if no layer key was used even after tap delay */
+#define TAPPING_TERM 50
+#define RETRO_TAPPING \ No newline at end of file
diff --git a/keyboards/niu_mini/keymaps/tucznak/keymap.c b/keyboards/niu_mini/keymaps/tucznak/keymap.c
new file mode 100644
index 000000000..94743fe2c
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/tucznak/keymap.c
@@ -0,0 +1,133 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _NUM,
+ _FN
+};
+
+enum keycodes {
+ QWERTY = SAFE_RANGE,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base layer (0)
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Esc/Fn| A | S | D | F | G | H | J | K | L | ; | Del |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | \| |Lower |Sp/Num|Space |Raise |AltGr | Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_BASE] = 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,
+ LT(_FN, KC_ESC), 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_UP, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_NUBS, MO(_LOWER), LT(_NUM, KC_SPC), KC_SPC, MO(_RAISE), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Lower layer (1)
+ * Function keys, navigation
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | Ins |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |CapsLk| |PrtSc |ScrLk |Pause | | | | | PgUp | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Menu | Home | PgDn | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_ortho_4x12(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
+ _______, KC_CAPS, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_APP, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ /* Raise layer (2)
+ * National characters, special characters
+ * ,-----------------------------------------------------------------------------------.
+ * | +1 | ě2 | š3 | č4 | ř5 | ž6 | ý7 | á8 | í9 | é0 | ´ | ˇ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ;° | | | | | | ( | ) | § | ! | ú | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | % | = | ¨ | ' | - | _ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_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_EQL, LSFT(KC_EQL),
+ KC_GRV, _______, _______, _______, _______, _______, LSFT(KC_RBRC), KC_RBRC, KC_QUOT, LSFT(KC_QUOT), KC_LBRC, LSFT(KC_LBRC),
+ _______, _______, _______, _______, _______, _______, LSFT(KC_MINS), KC_MINS, KC_BSLS, LSFT(KC_BSLS), KC_SLSH, LSFT(KC_SLSH),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Numbers layer - numpad (3)
+ * ,-----------------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | 4 | 5 | 6 | / | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |NumLk | | | | | | 1 | 2 | 3 | * | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | . | 0 | + | - | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_NUM] = LAYOUT_ortho_4x12(
+ _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PSLS, _______,
+ _______, KC_NLCK, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PAST, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_DOT, KC_KP_0, KC_PPLS, KC_PMNS, _______
+ ),
+
+ /* Function layer (4)
+ * Backlighting, keyboard controls, etc.
+ * m_ - music, r_ - RGB + backlight, f_ - macro
+ * ,-----------------------------------------------------------------------------------.
+ * | | r_BL | |Sleep | | | |f_Rec1|f_Pla1|f_Stop| |m_Vol+|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |r_VLK |r_Mod+|r_Hue+|r_Sat+|r_Bri+| |f_Rec2|f_Pla2| | |m_Vol-|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |r_TOG |r_Mod-|r_Hue-|r_Sat-|r_Bri-| | | | |m_Stop|m_Mute|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Reset| | | | |C+A+D |C+A+I | | |m_Prev|m_Paus|m_Next|
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT_ortho_4x12(
+ _______, BL_STEP, _______, KC_SLEP, _______, _______, _______, DYN_REC_START1, DYN_MACRO_PLAY1, DYN_REC_STOP, _______, KC_VOLU,
+ _______, VLK_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, KC_VOLD,
+ _______, RGB_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, KC_MSTP, KC_MUTE,
+ RESET, _______, _______, _______, _______, LCA(KC_DEL), LCA(KC_INS), _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
+ )
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/niu_mini/keymaps/tucznak/readme.md b/keyboards/niu_mini/keymaps/tucznak/readme.md
new file mode 100644
index 000000000..95180bc39
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/tucznak/readme.md
@@ -0,0 +1,5 @@
+# TuCZnak's modified layout
+
+This layout is optimized for Czech national QWERTZ keymap.
+It includes separated layers for numbers, national characters,
+special characters and configuration.
diff --git a/keyboards/niu_mini/keymaps/tucznak/rules.mk b/keyboards/niu_mini/keymaps/tucznak/rules.mk
new file mode 100644
index 000000000..bf5a36886
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/tucznak/rules.mk
@@ -0,0 +1,22 @@
+# 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
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# Userspace defines
+VELOCIKEY_ENABLE = yes
+LAYOUTS_HAS_RGB = no \ No newline at end of file
diff --git a/keyboards/niu_mini/rules.mk b/keyboards/niu_mini/rules.mk
index 01d96eccf..9b772fcb8 100644
--- a/keyboards/niu_mini/rules.mk
+++ b/keyboards/niu_mini/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/nomu30/rules.mk b/keyboards/nomu30/rules.mk
index d4785aabb..f51259b29 100644
--- a/keyboards/nomu30/rules.mk
+++ b/keyboards/nomu30/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/novelpad/keymaps/default/keymap.c b/keyboards/novelpad/keymaps/default/keymap.c
index 487a37783..76e0937e6 100755
--- a/keyboards/novelpad/keymaps/default/keymap.c
+++ b/keyboards/novelpad/keymaps/default/keymap.c
@@ -43,10 +43,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE ;
-}
-
void matrix_init_user(void) {
rgblight_setrgb(0,255,0);
diff --git a/keyboards/noxary/220/rules.mk b/keyboards/noxary/220/rules.mk
index 0f8cae926..af8b7d683 100644
--- a/keyboards/noxary/220/rules.mk
+++ b/keyboards/noxary/220/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -80,4 +79,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
-LAYOUTS = ortho_6x4 \ No newline at end of file
+LAYOUTS = ortho_6x4
diff --git a/keyboards/noxary/260/rules.mk b/keyboards/noxary/260/rules.mk
index 0fffc2d38..3a30930de 100644
--- a/keyboards/noxary/260/rules.mk
+++ b/keyboards/noxary/260/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/noxary/268_2/268_2.c b/keyboards/noxary/268_2/268_2.c
index da4e5efb7..9e2d82236 100644
--- a/keyboards/noxary/268_2/268_2.c
+++ b/keyboards/noxary/268_2/268_2.c
@@ -15,40 +15,14 @@
*/
#include "268_2.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);
-}
-
-__attribute__((weak))
-void led_set_user(uint8_t usb_led) {
-
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 0); PORTB |= (1 << 0);
- }
- else {
- DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+ setPinOutput(B0);
+ writePinHigh(B0);
+ } else {
+ setPinInput(B0);
+ writePinLow(B0);
}
+
+ led_set_user(usb_led);
}
diff --git a/keyboards/noxary/268_2/268_2.h b/keyboards/noxary/268_2/268_2.h
index 2f5d985a3..71fd84417 100644
--- a/keyboards/noxary/268_2/268_2.h
+++ b/keyboards/noxary/268_2/268_2.h
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef N268_2_H
-#define N268_2_H
+#pragma once
#include "quantum.h"
@@ -27,17 +26,57 @@
* represents the switch matrix.
*/
#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, K112, K114, K115, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K214, K215, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
- K400, K401, K402, K406, K409, K410, K412, K414, K415 \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K214, K215, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
+ K400, K401, K402, K406, K409, K410, K412, K414, K415 \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115, }, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, KC_NO, K214, K215, }, \
- { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315, }, \
- { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, K409, K410, KC_NO, K412, KC_NO, K414, K415, } \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, KC_NO, K214, K215 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, K409, K410, KC_NO, K412, KC_NO, K414, K415 } \
}
-#endif
+#define LAYOUT_split_bs( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K214, K215, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
+ K400, K401, K402, K406, K409, K410, K412, K414, K415 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, KC_NO, K214, K215 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, K409, K410, KC_NO, K412, KC_NO, K414, K415 } \
+}
+
+#define LAYOUT_7u_space( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K214, K215, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
+ K400, K401, K402, K406, K410, K412, K414, K415 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, KC_NO, K214, K215 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, KC_NO, K412, KC_NO, K414, K415 } \
+}
+
+#define LAYOUT_7u_space_split_bs( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K214, K215, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
+ K400, K401, K402, K406, K410, K412, K414, K415 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, KC_NO, K214, K215 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, K314, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, KC_NO, K412, KC_NO, K414, K415 } \
+}
diff --git a/keyboards/noxary/268_2/config.h b/keyboards/noxary/268_2/config.h
index 547c729f9..fbfb97f02 100644
--- a/keyboards/noxary/268_2/config.h
+++ b/keyboards/noxary/268_2/config.h
@@ -41,7 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
-/* key matrix pins */
#define MATRIX_ROW_PINS { F7, F6, F5, F0, B5 }
#define MATRIX_COL_PINS { C6, B6, C7, F4, E6, D0, D7, D1, D2, B4, D6, D4, D5, F1, D3, B1 }
#define UNUSED_PINS
@@ -49,11 +48,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-/* number of backlight levels */
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
#define BACKLIGHT_PIN B7
-#ifdef BACKLIGHT_PIN
+//define BACKLIGHT_BREATHING
#define BACKLIGHT_LEVELS 3
-#endif
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
@@ -106,6 +136,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+/* 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
@@ -115,8 +149,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#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_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
@@ -124,9 +158,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#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_LAYER0_ALT GRAVE
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
@@ -136,9 +169,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#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
diff --git a/keyboards/noxary/268_2/info.json b/keyboards/noxary/268_2/info.json
index 8d227afd8..b47e2de98 100644
--- a/keyboards/noxary/268_2/info.json
+++ b/keyboards/noxary/268_2/info.json
@@ -5,8 +5,289 @@
"width": 16,
"height": 5,
"layouts": {
- "LAYOUT": {
- "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
- }
+ "LAYOUT": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+ {"x":15, "y":0},
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_split_bs": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15, "y":0},
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_7u_space": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+ {"x":15, "y":0},
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+ {"x":0, "y":4, "w":1.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":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_7u_space_split_bs": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15, "y":0},
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+ {"x":0, "y":4, "w":1.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":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ }
}
}
diff --git a/keyboards/noxary/268_2/keymaps/default/keymap.c b/keyboards/noxary/268_2/keymaps/default/keymap.c
index 994fe36b0..c22ec2b1d 100644
--- a/keyboards/noxary/268_2/keymaps/default/keymap.c
+++ b/keyboards/noxary/268_2/keymaps/default/keymap.c
@@ -4,80 +4,51 @@
// 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 _BL 0
-#define _FL1 1
-#define _FL2 2
+enum layer_names {
+ _BL,
+ _FL
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* _BL: Base Layer(Default) - For ISO enter use ANSI enter
- * ,----------------------------------------------------------------.
- * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BSpc| Grv|
- * |----------------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Del|
- * |----------------------------------------------------------------|
- * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #| Ent|PgUp|
- * |----------------------------------------------------------------|
- * |Shift| \| Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
- * |----------------------------------------------------------------|
- * |Ctrl|Win |Alt | Space |Alt|Mo(1)|Ctrl|Lef|Dow|Rght|
- * `----------------------------------------------------------------'
+ /* Base Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Bspc │ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │ ↑ │PgD│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │Ctrl│Win │Alt │ Space │Alt │ Fn │ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴───┴───┘
*/
[_BL] = 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_GRV,
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL1), KC_LEFT, KC_DOWN, KC_RGHT),
- /* _FL1: Function Layer 1 - For ISO enter use ANSI enter
- * ,----------------------------------------------------------------.
- * | `|F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| |PScr| |
- * |----------------------------------------------------------------|
- * | | | | |RST| | | | | | | | | | Ins|
- * |----------------------------------------------------------------|
- * | | | | | | | | | | | | | | |Home|
- * |----------------------------------------------------------------|
- * | | | | | | | | | |Bl-|Bl+| |Mute|Vol+| End|
- * |----------------------------------------------------------------|
- * | | | | BL_Toggle | | | | |Vol-| |
- * `----------------------------------------------------------------'
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Function Layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
+ * │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ PScr │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
+ * │ │ │ │ │RST│ │ │ │ │ │ │ │ │ │Ins│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │Hom│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │ │ │ │ │ │ │Bl-│Bl+│ Mute │Vl+│End│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │ │ │ BL Toggle │ │ │ │ │Vl-│ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴─┴───┴───┴───┘
*/
- [_FL1] = 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_PSCR, _______,
+ [_FL] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______,
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
- _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, _______, KC_MUTE, KC_VOLU, KC_END,
- _______, _______, _______, BL_TOGG, _______, _______, _______, KC_VOLD, _______),
- /* _FL2: Function Layer 2 - For ISO enter use ANSI enter
- * ,----------------------------------------------------------------.
- * | | | | | | | | | | | | | | | | |
- * |----------------------------------------------------------------|
- * | | | | | | | | | | | | | | | |
- * |----------------------------------------------------------------|
- * | | | | | | | | | | | | | | | |
- * |----------------------------------------------------------------|
- * | | | | | | | | | | | | | | | |
- * |----------------------------------------------------------------|
- * | | | | | | | | | | |
- * `----------------------------------------------------------------'
- */
- [_FL2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______),
-
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, KC_MUTE, KC_VOLU, KC_END,
+ _______, _______, _______, BL_TOGG, _______, _______, _______, KC_VOLD, _______
+ )
};
-
-
-void matrix_init_user(void) {
-}
-
-void matrix_scan_user(void) {
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-
diff --git a/keyboards/noxary/268_2/readme.md b/keyboards/noxary/268_2/readme.md
index 85d1a4717..075a1d26c 100644
--- a/keyboards/noxary/268_2/readme.md
+++ b/keyboards/noxary/268_2/readme.md
@@ -4,10 +4,9 @@
A fully customizable 65% keyboard.
-* Keyboard Maintainer: [Rozakiin](https://github.com/rozakiin)
-* Hardware Supported: 268.2 PCB
- * rev1
-* Hardware Availability: [Noxary](https://shop.noxary.co/collections/268-2/products/noxary-268-2-polycarbonate)
+Keyboard Maintainer: [Rozakiin](https://github.com/rozakiin)
+Hardware Supported: 268.2 PCB
+Hardware Availability: [Noxary](https://shop.noxary.co/collections/268-2/products/noxary-268-2-polycarbonate)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/noxary/268_2/rules.mk b/keyboards/noxary/268_2/rules.mk
index 9b6d7e672..a89c930a1 100644
--- a/keyboards/noxary/268_2/rules.mk
+++ b/keyboards/noxary/268_2/rules.mk
@@ -48,16 +48,6 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
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
#
diff --git a/keyboards/noxary/280/rules.mk b/keyboards/noxary/280/rules.mk
index ad6117f16..f99ee37b0 100644
--- a/keyboards/noxary/280/rules.mk
+++ b/keyboards/noxary/280/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/omnikeyish/info.json b/keyboards/omnikeyish/info.json
index 0efb1270e..4a9e86d4c 100644
--- a/keyboards/omnikeyish/info.json
+++ b/keyboards/omnikeyish/info.json
@@ -6,31 +6,79 @@
"height": 7,
"layouts": {
"LAYOUT_all": {
- "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"x":21.6667, "y":0}, {"x":22.6667, "y":0}, {"x":23.6667, "y":0}, {"x":24.6667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"|", "x":16.1667, "y":3, "w":1.5}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"~", "x":15.4167, "y":4}, {"label":"Enter", "x":16.4167, "y":4, "w":1.25}, {"x":18.1667, "y":4}, {"x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":1.25}, {"label":"|", "x":3.9167, "y":5}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"x":18.1667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.25}, {"label":"Win", "x":3.9167, "y":6, "w":1.25}, {"label":"Alt", "x":5.1667, "y":6, "w":1.25}, {"x":6.4167, "y":6, "w":6.25}, {"label":"Alt Gr", "x":12.6667, "y":6, "w":1.25}, {"label":"Win", "x":13.9167, "y":6, "w":1.25}, {"label":"Compose", "x":15.1667, "y":6, "w":1.25}, {"label":"Ctrl", "x":16.4167, "y":6, "w":1.25}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"x":21.6667, "y":0}, {"x":22.6667, "y":0}, {"x":23.6667, "y":0}, {"x":24.6667, "y":0},
+ {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"|", "x":16.1667, "y":3, "w":1.5}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"~", "x":15.4167, "y":4}, {"label":"Enter", "x":16.4167, "y":4, "w":1.25}, {"x":18.1667, "y":4}, {"x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":1.25}, {"label":"|", "x":3.9167, "y":5}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"x":18.1667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.25}, {"label":"Win", "x":3.9167, "y":6, "w":1.25}, {"label":"Alt", "x":5.1667, "y":6, "w":1.25}, {"x":6.4167, "y":6, "w":6.25}, {"label":"Alt Gr", "x":12.6667, "y":6, "w":1.25}, {"label":"Win", "x":13.9167, "y":6, "w":1.25}, {"label":"Compose", "x":15.1667, "y":6, "w":1.25}, {"label":"Ctrl", "x":16.4167, "y":6, "w":1.25}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
},
"LAYOUT_101": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.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":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"label":"Alt", "x":11, "y":5.5, "w":1.5}, {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
+ "layout": [ {"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0},
+ {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.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":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"label":"Alt", "x":11, "y":5.5, "w":1.5}, {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
+ },
+ "LAYOUT_ultra_t": {
+ "layout": [ {"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"*", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+
+
},
"LAYOUT_ultra_rev1": {
- "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"F1", "x":2.6667, "y":0}, {"label":"F2", "x":3.6667, "y":0}, {"label":"F3", "x":4.6667, "y":0}, {"label":"F4", "x":5.6667, "y":0}, {"label":"F5", "x":8.1667, "y":0}, {"label":"F6", "x":9.1667, "y":0}, {"label":"F7", "x":10.1667, "y":0}, {"label":"F8", "x":11.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.6667, "y":0}, {"label":"Scroll Lock", "x":19.6667, "y":0}, {"label":"Pause", "x":20.6667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"F1", "x":2.6667, "y":0}, {"label":"F2", "x":3.6667, "y":0}, {"label":"F3", "x":4.6667, "y":0}, {"label":"F4", "x":5.6667, "y":0}, {"label":"F5", "x":8.1667, "y":0}, {"label":"F6", "x":9.1667, "y":0}, {"label":"F7", "x":10.1667, "y":0}, {"label":"F8", "x":11.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
},
"LAYOUT_ultra_rev3": {
- "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
},
"LAYOUT_plus_rev3": {
- "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
},
"LAYOUT_plus_rev1": {
- "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
},
"LAYOUT_102_rev1": {
- "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2},{"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
},
"LAYOUT_102_rev3": {
- "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"*", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
- },
- "LAYOUT_ultra_t": {
- "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+ "layout": [ {"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0},
+ {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2},
+ {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3},
+ {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4},
+ {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2},
+ {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"*", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
}
+
}
} \ No newline at end of file
diff --git a/keyboards/omnikeyish/keymaps/default_101/keymap.c b/keyboards/omnikeyish/keymaps/default_101/keymap.c
new file mode 100644
index 000000000..6e5e41cd1
--- /dev/null
+++ b/keyboards/omnikeyish/keymaps/default_101/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+#define M_PROG DYN_MACRO_PROG
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_101(
+ 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, M_PROG, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ )
+};
diff --git a/keyboards/omnikeyish/omnikeyish.h b/keyboards/omnikeyish/omnikeyish.h
index b961d7c7d..8f3e69bc3 100644
--- a/keyboards/omnikeyish/omnikeyish.h
+++ b/keyboards/omnikeyish/omnikeyish.h
@@ -29,19 +29,19 @@ enum keycodes {
}
/* Northgate Factory Plates. Most are based on internet research, user beware. */
-#define LAYOUT_101 ( \
+#define LAYOUT_101( \
K103, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119, \
K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219, K220, K221, K222, K223, \
- K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316 K317, K318, K319, K320, K321, K322, K323, \
+ K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, K319, K320, K321, K322, K323, \
K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K416, K420, K421, K422, \
- K503, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516, K518, K520, K521, K522, K523, \
+ K503, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K518, K520, K521, K522, K523, \
K603, K605, K610, K613, K616, K617, K618, K619, K620, K622 \
) { \
- { ____, ____, K103, ____ K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119, ____, ____, ____, ____ }, \
+ { ____, ____, K103, ____, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119, ____, ____, ____, ____ }, \
{ ____, ____, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219, K220, K221, K222, K223 }, \
{ ____, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, K319, K320, K321, K322, K323 }, \
{ ____, ____, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416, ____, ____, ____, K420, K421, K422, ____ }, \
- { ____, ____, K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516, ____, K518, ____, K520, K521, K522, K523 }, \
+ { ____, ____, K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, ____, ____, K518, ____, K520, K521, K522, K523 }, \
{ ____, ____, K603, ____, K605, ____, ____, ____, ____, K610, ____, ____, K613, ____, ____, K616, K617, K618, K619, K620, ____, K622, ____ } \
}
diff --git a/keyboards/org60/keymaps/default/keymap.c b/keyboards/org60/keymaps/default/keymap.c
index bf5438657..1c209a72d 100644
--- a/keyboards/org60/keymaps/default/keymap.c
+++ b/keyboards/org60/keymaps/default/keymap.c
@@ -20,20 +20,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// Macros
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) { register_code(KC_RSFT); }
- else { unregister_code(KC_RSFT); }
- break;
- }
-
- return MACRO_NONE;
-};
-
// Loop
void matrix_scan_user(void) {
// Empty
diff --git a/keyboards/otaku_split/rev0/config.h b/keyboards/otaku_split/rev0/config.h
new file mode 100644
index 000000000..5e1bfaacd
--- /dev/null
+++ b/keyboards/otaku_split/rev0/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 takashiski
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 takashiski
+#define PRODUCT otaku_split
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B5,B4,E6,D7,C6 }
+#define MATRIX_COL_PINS { B6,B2,B3,B1,F7,F6,F5,F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/otaku_split/rev0/info.json b/keyboards/otaku_split/rev0/info.json
new file mode 100644
index 000000000..b5608cb49
--- /dev/null
+++ b/keyboards/otaku_split/rev0/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Otaku split rev.0",
+ "url": "",
+ "maintainer": "takashiski",
+ "width": 17.75,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"\u534a\u89d2", "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":9.75, "y":0}, {"label":"*", "x":10.75, "y":0}, {"label":"(", "x":11.75, "y":0}, {"label":")", "x":12.75, "y":0}, {"label":"=", "x":13.75, "y":0}, {"label":"~", "x":14.75, "y":0}, {"label":"|", "x":15.75, "y":0}, {"label":"Backspace", "x":16.75, "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":"7", "x":6.5, "y":1}, {"label":"Y", "x":9.25, "y":1}, {"label":"U", "x":10.25, "y":1}, {"label":"I", "x":11.25, "y":1}, {"label":"O", "x":12.25, "y":1}, {"label":"P", "x":13.25, "y":1}, {"label":"`", "x":14.25, "y":1}, {"label":"{", "x":15.25, "y":1}, {"label":"Enter", "x":16.5, "y":1, "w":1.25, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":9.5, "y":2}, {"label":"J", "x":10.5, "y":2}, {"label":"K", "x":11.5, "y":2}, {"label":"L", "x":12.5, "y":2}, {"label":"+", "x":13.5, "y":2}, {"label":"*", "x":14.5, "y":2}, {"label":"}", "x":15.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":"1", "x":9, "y":3}, {"label":"N", "x":10, "y":3}, {"label":"M", "x":11, "y":3}, {"label":"<", "x":12, "y":3}, {"label":">", "x":13, "y":3}, {"label":"?", "x":14, "y":3}, {"label":"_", "x":15, "y":3}, {"label":"Shift", "x":16, "y":3, "w":1.75}, {"x":0, "y":4, "w":2}, {"label":"Ctrl", "x":2, "y":4, "w":1.25}, {"label":"Alt", "x":3.25, "y":4, "w":1.25}, {"label":"\u7121\u5909\u63db", "x":4.5, "y":4}, {"label":"\u2190", "x":5.5, "y":4}, {"label":"\u2193", "x":6.5, "y":4}, {"label":"\u2191", "x":8.75, "y":4}, {"label":"\u2192", "x":9.75, "y":4}, {"label":".", "x":10.75, "y":4}, {"label":"Menu", "x":11.75, "y":4}, {"label":"\u5909\u63db", "x":12.75, "y":4, "w":1.25}, {"label":"\u30ab\u30bf\u30ab\u30ca", "x":14, "y":4, "w":1.25}, {"label":"Alt", "x":15.25, "y":4, "w":1.25}, {"label":"Ctrl", "x":16.5, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/otaku_split/rev0/keymaps/default/config.h b/keyboards/otaku_split/rev0/keymaps/default/config.h
new file mode 100644
index 000000000..25cddc6bb
--- /dev/null
+++ b/keyboards/otaku_split/rev0/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/otaku_split/rev0/keymaps/default/keymap.c b/keyboards/otaku_split/rev0/keymaps/default/keymap.c
new file mode 100644
index 000000000..844e9c50e
--- /dev/null
+++ b/keyboards/otaku_split/rev0/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS ,KC_EQL,KC_JYEN,KC_BSPC,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_ENT,
+ KC_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_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH,KC_RO,KC_RSHIFT,
+ KC_LCTRL, KC_LGUI,KC_LALT,KC_MHEN,KC_TAB,KC_SPC, KC_ENT,KC_BSPC,KC_HENK,KC_KANA,KC_RALT,KC_RGUI,KC_APP,KC_RCTRL
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/otaku_split/rev0/keymaps/default/readme.md b/keyboards/otaku_split/rev0/keymaps/default/readme.md
new file mode 100644
index 000000000..dbaaa2eb8
--- /dev/null
+++ b/keyboards/otaku_split/rev0/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for otaku_split \ No newline at end of file
diff --git a/keyboards/otaku_split/rev0/keymaps/sample/config.h b/keyboards/otaku_split/rev0/keymaps/sample/config.h
new file mode 100644
index 000000000..25cddc6bb
--- /dev/null
+++ b/keyboards/otaku_split/rev0/keymaps/sample/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/otaku_split/rev0/keymaps/sample/keymap.c b/keyboards/otaku_split/rev0/keymaps/sample/keymap.c
new file mode 100644
index 000000000..b1df2cef0
--- /dev/null
+++ b/keyboards/otaku_split/rev0/keymaps/sample/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
+
+#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
+#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
+
+#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
+#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+// 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_wrapper(\
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS ,KC_EQL,KC_JYEN,KC_BSPC,\
+ KC_TAB, _________________QWERTY_L1_________________,KC_Y, _________________QWERTY_R1_________________,KC_LBRC,KC_RBRC,KC_ENT,\
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,KC_QUOT,KC_NUHS,\
+ KC_LSHIFT,_________________QWERTY_L3_________________, KC_B,_________________QWERTY_R3_________________,KC_RO,KC_RSHIFT,\
+ KC_LCTRL, KC_LGUI,KC_LALT,KC_MHEN,KC_TAB,KC_SPC, KC_ENT,KC_BSPC,KC_HENK,KC_KANA,KC_RALT,KC_RGUI,KC_APP,KC_RCTRL\
+ ),
+};
+
+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/otaku_split/rev0/keymaps/sample/readme.md b/keyboards/otaku_split/rev0/keymaps/sample/readme.md
new file mode 100644
index 000000000..dbaaa2eb8
--- /dev/null
+++ b/keyboards/otaku_split/rev0/keymaps/sample/readme.md
@@ -0,0 +1 @@
+# The default keymap for otaku_split \ No newline at end of file
diff --git a/keyboards/otaku_split/rev0/readme.md b/keyboards/otaku_split/rev0/readme.md
new file mode 100644
index 000000000..9103843d5
--- /dev/null
+++ b/keyboards/otaku_split/rev0/readme.md
@@ -0,0 +1,16 @@
+# Otaku Split rev.0
+
+![otaku_split](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1365150/9953f612-d35f-4f31-873d-2323c7b2f622_base_resized.jpg)
+
+Otaku Split is Japanese layout based keyboard.
+rev.0 is prototype. it has MDF color plate Iron Black and Ayanami blue.
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+Hardware Supported: promicro(atmega32u4)
+Hardware Availability: https://skyhigh-works.booth.pm/items/1365150
+
+Make example for this keyboard (after setting up your build environment):
+
+ make otaku_split/rev0: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/otaku_split/rev0/rev0.c b/keyboards/otaku_split/rev0/rev0.c
new file mode 100644
index 000000000..75c24b584
--- /dev/null
+++ b/keyboards/otaku_split/rev0/rev0.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "rev0.h"
+
+// 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/otaku_split/rev0/rev0.h b/keyboards/otaku_split/rev0/rev0.h
new file mode 100644
index 000000000..c3040d233
--- /dev/null
+++ b/keyboards/otaku_split/rev0/rev0.h
@@ -0,0 +1,48 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT(\
+L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06,R07,\
+L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16,R17,\
+L20,L21,L22,L23,L24,L25, R20,R21,R22,R23,R24,R25,R26, \
+L30,L31,L32,L33,L34,L35, R30,R31,R32,R33,R34,R35,R36,R37,\
+L40,L41,L42,L43,L44,L45, R40,R41,R42,R43,R44,R45,R46,R47\
+) {\
+{L00,L01,L02,L03,L04,L05,L06,KC_NO},\
+{L10,L11,L12,L13,L14,L15,L16,KC_NO},\
+{L20,L21,L22,L23,L24,L25,KC_NO,KC_NO},\
+{L30,L31,L32,L33,L34,L35,KC_NO,KC_NO},\
+{L40,L41,L42,L43,L44,L45,KC_NO,KC_NO},\
+{R00,R01,R02,R03,R04,R05,R06,R07},\
+{R10,R11,R12,R13,R14,R15,R16,R17},\
+{R20,R21,R22,R23,R24,R25,R26,KC_NO},\
+{R30,R31,R32,R33,R34,R35,R36,R37},\
+{R40,R41,R42,R43,R44,R45,R46,R47}\
+}
+
+
diff --git a/keyboards/otaku_split/rev0/rules.mk b/keyboards/otaku_split/rev0/rules.mk
new file mode 100644
index 000000000..04e0aacb1
--- /dev/null
+++ b/keyboards/otaku_split/rev0/rules.mk
@@ -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 = 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)
+SPLIT_KEYBOARD=yes
diff --git a/keyboards/otaku_split/rev1/config.h b/keyboards/otaku_split/rev1/config.h
new file mode 100644
index 000000000..e15ae40d3
--- /dev/null
+++ b/keyboards/otaku_split/rev1/config.h
@@ -0,0 +1,255 @@
+/*
+Copyright 2019 takashiski
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 takashiski
+#define PRODUCT otaku_split
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { C6,D7,E6,B4,B5 }
+#define MATRIX_COL_PINS { F4,F5,F6,F7,B1,B3,B2,B6 }
+#define MATRIX_ROW_PINS_RIGHT { B5,B4,E6,D7,C6 }
+#define MATRIX_COL_PINS_RIGHT { B6,B2,B3,B1,F7,F6,F5,F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+#define SPLIT_HAND_PIN D2 //fix pin. HIGH is left, LOW is right
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/otaku_split/rev1/info.json b/keyboards/otaku_split/rev1/info.json
new file mode 100644
index 000000000..9ee273375
--- /dev/null
+++ b/keyboards/otaku_split/rev1/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "otaku split rev.1",
+ "url": "http",
+ "maintainer": "takashiski",
+ "width": 17.75,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"\u534a\u89d2", "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":"Insert", "x":8.75, "y":0}, {"label":"&", "x":9.75, "y":0}, {"label":"*", "x":10.75, "y":0}, {"label":"(", "x":11.75, "y":0}, {"label":")", "x":12.75, "y":0}, {"label":"=", "x":13.75, "y":0}, {"label":"~", "x":14.75, "y":0}, {"label":"|", "x":15.75, "y":0}, {"label":"Backspace", "x":16.75, "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":"7", "x":6.5, "y":1}, {"label":"Y", "x":9.25, "y":1}, {"label":"U", "x":10.25, "y":1}, {"label":"I", "x":11.25, "y":1}, {"label":"O", "x":12.25, "y":1}, {"label":"P", "x":13.25, "y":1}, {"label":"`", "x":14.25, "y":1}, {"label":"{", "x":15.25, "y":1}, {"label":"Enter", "x":16.5, "y":1, "w":1.25, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":9.5, "y":2}, {"label":"J", "x":10.5, "y":2}, {"label":"K", "x":11.5, "y":2}, {"label":"L", "x":12.5, "y":2}, {"label":"+", "x":13.5, "y":2}, {"label":"*", "x":14.5, "y":2}, {"label":"}", "x":15.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":"1", "x":9, "y":3}, {"label":"N", "x":10, "y":3}, {"label":"M", "x":11, "y":3}, {"label":"<", "x":12, "y":3}, {"label":">", "x":13, "y":3}, {"label":"?", "x":14, "y":3}, {"label":"_", "x":15, "y":3}, {"label":"Shift", "x":16, "y":3, "w":1.75}, {"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":"\u7121\u5909\u63db", "x":3.5, "y":4}, {"label":"2", "x":4.5, "y":4}, {"label":"\u2190", "x":5.5, "y":4}, {"label":"\u2193", "x":6.5, "y":4}, {"label":"\u2191", "x":8.75, "y":4}, {"label":"\u2192", "x":9.75, "y":4}, {"label":".", "x":10.75, "y":4}, {"label":"\u5909\u63db", "x":11.75, "y":4, "w":1.25}, {"label":"\u30ab\u30bf\u30ab\u30ca", "x":13, "y":4, "w":1.25}, {"label":"Alt", "x":14.25, "y":4, "w":1.25}, {"label":"Menu", "x":15.5, "y":4}, {"label":"Ctrl", "x":16.5, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/otaku_split/rev1/keymaps/default/config.h b/keyboards/otaku_split/rev1/keymaps/default/config.h
new file mode 100644
index 000000000..25cddc6bb
--- /dev/null
+++ b/keyboards/otaku_split/rev1/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/otaku_split/rev1/keymaps/default/keymap.c b/keyboards/otaku_split/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000..c708e53eb
--- /dev/null
+++ b/keyboards/otaku_split/rev1/keymaps/default/keymap.c
@@ -0,0 +1,58 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layers{
+ BASE=0,
+ CURSOR
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT(
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS ,KC_EQL,KC_JYEN,KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_ENT,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,KC_NUHS,
+ KC_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH,KC_RO,KC_RSHIFT,
+ KC_LCTRL, KC_LGUI,KC_LALT,KC_MHEN,LT(CURSOR,KC_TAB),KC_SPC,KC_SPC, LT(CURSOR,KC_SPC),KC_ENT,KC_BSPC,KC_HENK,LT(CURSOR,KC_KANA),KC_RALT,KC_APP,KC_RCTRL
+ ),
+ [CURSOR] = LAYOUT(
+ KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_JYEN,KC_DEL,
+ KC_TAB, KC_Q, KC_UP, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_PSCR,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F, KC_G, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_SCLN, KC_QUOT,KC_NUHS,
+ KC_LSHIFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_END,KC_UP,KC_HOME,
+ KC_LCTRL, KC_LGUI,KC_LALT,KC_MHEN,KC_TRNS,KC_SPC,KC_SPC, KC_TRNS,KC_ENT,KC_BSPC,KC_HENK,KC_TRNS,KC_LEFT,KC_DOWN,KC_RIGHT
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/otaku_split/rev1/keymaps/default/readme.md b/keyboards/otaku_split/rev1/keymaps/default/readme.md
new file mode 100644
index 000000000..dbaaa2eb8
--- /dev/null
+++ b/keyboards/otaku_split/rev1/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for otaku_split \ No newline at end of file
diff --git a/keyboards/otaku_split/rev1/keymaps/sample/config.h b/keyboards/otaku_split/rev1/keymaps/sample/config.h
new file mode 100644
index 000000000..25cddc6bb
--- /dev/null
+++ b/keyboards/otaku_split/rev1/keymaps/sample/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/otaku_split/rev1/keymaps/sample/keymap.c b/keyboards/otaku_split/rev1/keymaps/sample/keymap.c
new file mode 100644
index 000000000..6875f462f
--- /dev/null
+++ b/keyboards/otaku_split/rev1/keymaps/sample/keymap.c
@@ -0,0 +1,85 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
+
+#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
+#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
+
+#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
+#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+enum layers{
+ BASE=0
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_wrapper(\
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS ,KC_EQL,KC_JYEN,KC_BSPC,\
+ KC_TAB, _________________QWERTY_L1_________________,KC_Y, _________________QWERTY_R1_________________,KC_LBRC,KC_RBRC,KC_ENT,\
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,KC_QUOT,KC_NUHS,\
+ KC_LSHIFT,_________________QWERTY_L3_________________, KC_B,_________________QWERTY_R3_________________,KC_RO,KC_RSHIFT,\
+ KC_LCTRL, KC_LGUI,KC_LALT,KC_MHEN,KC_TAB,KC_SPC,KC_SPC, KC_SPC,KC_ENT,KC_BSPC,KC_HENK,KC_KANA,KC_RALT,KC_APP,KC_RCTRL\
+ )
+};
+
+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/otaku_split/rev1/keymaps/sample/readme.md b/keyboards/otaku_split/rev1/keymaps/sample/readme.md
new file mode 100644
index 000000000..dbaaa2eb8
--- /dev/null
+++ b/keyboards/otaku_split/rev1/keymaps/sample/readme.md
@@ -0,0 +1 @@
+# The default keymap for otaku_split \ No newline at end of file
diff --git a/keyboards/otaku_split/rev1/readme.md b/keyboards/otaku_split/rev1/readme.md
new file mode 100644
index 000000000..592c82641
--- /dev/null
+++ b/keyboards/otaku_split/rev1/readme.md
@@ -0,0 +1,19 @@
+# otaku_split
+
+![otaku_split](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1398595/511647ef-43e4-4f50-b56d-a0166c090fae_base_resized.jpg)
+![otaku_split_bottom](https://booth.pximg.net/c/620x620/4394ec37-d0ff-4c92-8f78-5c08d0566da6/i/1398595/cc9eb113-46a9-42fa-aaed-c4007efbe45e_base_resized.jpg)
+
+
+This is JP layout based split keyboards.
+
+
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+Hardware Supported: promicro(atmega32u4) on Otaku Split rev.1 PCB
+Hardware Availability: https://skyhigh-works.booth.pm/items/1398595
+
+Make example for this keyboard (after setting up your build environment):
+
+ make otaku_split/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/otaku_split/rev1/rev1.c b/keyboards/otaku_split/rev1/rev1.c
new file mode 100644
index 000000000..88b42eb95
--- /dev/null
+++ b/keyboards/otaku_split/rev1/rev1.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "rev1.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+*/
diff --git a/keyboards/otaku_split/rev1/rev1.h b/keyboards/otaku_split/rev1/rev1.h
new file mode 100644
index 000000000..a1f71f033
--- /dev/null
+++ b/keyboards/otaku_split/rev1/rev1.h
@@ -0,0 +1,47 @@
+/* Copyright 2019 takashiski
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT(\
+L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06,R07,R17,\
+L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16,R27,\
+L20,L21,L22,L23,L24,L25, R20,R21,R22,R23,R24,R25,R26, \
+L30,L31,L32,L33,L34,L35, R30,R31,R32,R33,R34,R35,R36,R37,\
+L40,L41,L42,L43,L44,L45,L46, R40,R41,R42,R43,R44,R45,R46,R47\
+) {\
+{L00,L01,L02,L03,L04,L05,L06,KC_NO},\
+{L10,L11,L12,L13,L14,L15,L16,KC_NO},\
+{L20,L21,L22,L23,L24,L25,KC_NO,KC_NO},\
+{L30,L31,L32,L33,L34,L35,KC_NO,KC_NO},\
+{L40,L41,L42,L43,L44,L45,L46,KC_NO},\
+{R00,R01,R02,R03,R04,R05,R06,R07},\
+{R10,R11,R12,R13,R14,R15,R16,R17},\
+{R20,R21,R22,R23,R24,R25,R26,R27},\
+{R30,R31,R32,R33,R34,R35,R36,R37},\
+{R40,R41,R42,R43,R44,R45,R46,R47}\
+}
+
diff --git a/keyboards/otaku_split/rev1/rules.mk b/keyboards/otaku_split/rev1/rules.mk
new file mode 100644
index 000000000..04e0aacb1
--- /dev/null
+++ b/keyboards/otaku_split/rev1/rules.mk
@@ -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 = 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)
+SPLIT_KEYBOARD=yes
diff --git a/keyboards/paladin64/keymaps/default/keymap.c b/keyboards/paladin64/keymaps/default/keymap.c
index 3f4608438..63c1f1f0b 100755
--- a/keyboards/paladin64/keymaps/default/keymap.c
+++ b/keyboards/paladin64/keymaps/default/keymap.c
@@ -44,15 +44,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- // keyevent_t event = record->event;
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/pdxkbc/config.h b/keyboards/pdxkbc/config.h
new file mode 100644
index 000000000..c547bb090
--- /dev/null
+++ b/keyboards/pdxkbc/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 Franklin Harding
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 Franklin Harding
+#define PRODUCT pdxkbc
+#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 { F7, B6, F4 }
+#define MATRIX_COL_PINS { D1, E6 }
+#define UNUSED_PINS { D0, D4, C6, D7, B4, B5, F5, F6, B1, B3, B2 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/pdxkbc/info.json b/keyboards/pdxkbc/info.json
new file mode 100644
index 000000000..6c32ea753
--- /dev/null
+++ b/keyboards/pdxkbc/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "pdxkbc",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 2,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"reddit", "x":0, "y":0}, {"label":"discord", "x":1, "y":0}, {"label":"badge", "x":0, "y":1}, {"label":"hack", "x":1, "y":1}, {"label":"volu", "x":0, "y":2}, {"label":"vold", "x":1, "y":2}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/pdxkbc/keymaps/default/config.h b/keyboards/pdxkbc/keymaps/default/config.h
new file mode 100644
index 000000000..355f2db52
--- /dev/null
+++ b/keyboards/pdxkbc/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/pdxkbc/keymaps/default/keymap.c b/keyboards/pdxkbc/keymaps/default/keymap.c
new file mode 100644
index 000000000..feb344704
--- /dev/null
+++ b/keyboards/pdxkbc/keymaps/default/keymap.c
@@ -0,0 +1,65 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 {
+ PDXKBCREDDIT = SAFE_RANGE,
+ PDXKBCDISCORD,
+ BADGELIFE,
+ HACKTHEPLANET
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ PDXKBCREDDIT, PDXKBCDISCORD,
+ BADGELIFE, HACKTHEPLANET,
+ KC_VOLU, KC_VOLD
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case PDXKBCREDDIT:
+ if (record->event.pressed) {
+ SEND_STRING("https://reddit.com/r/pdxkbc" SS_TAP(X_ENTER));
+ }
+ break;
+ case PDXKBCDISCORD:
+ if (record->event.pressed) {
+ SEND_STRING("https://discordapp.com/invite/bHwjHXh" SS_TAP(X_ENTER));
+ }
+ break;
+ case BADGELIFE:
+ if (record->event.pressed) {
+ SEND_STRING("#badgelife" SS_TAP(X_ENTER));
+ }
+ break;
+ case HACKTHEPLANET:
+ if (record->event.pressed) {
+ SEND_STRING("HACK THE PLANET!" SS_TAP(X_ENTER));
+ }
+ 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/pdxkbc/keymaps/default/readme.md b/keyboards/pdxkbc/keymaps/default/readme.md
new file mode 100644
index 000000000..1371be848
--- /dev/null
+++ b/keyboards/pdxkbc/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for pdxkbc \ No newline at end of file
diff --git a/keyboards/pdxkbc/pdxkbc.c b/keyboards/pdxkbc/pdxkbc.c
new file mode 100644
index 000000000..26c2d2fe4
--- /dev/null
+++ b/keyboards/pdxkbc/pdxkbc.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "pdxkbc.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/pdxkbc/pdxkbc.h b/keyboards/pdxkbc/pdxkbc.h
new file mode 100644
index 000000000..4700252a6
--- /dev/null
+++ b/keyboards/pdxkbc/pdxkbc.h
@@ -0,0 +1,37 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 \
+) \
+{ \
+ { k00, k01 }, \
+ { k10, k11 }, \
+ { k20, k21 }, \
+}
diff --git a/keyboards/pdxkbc/readme.md b/keyboards/pdxkbc/readme.md
new file mode 100644
index 000000000..cb2307465
--- /dev/null
+++ b/keyboards/pdxkbc/readme.md
@@ -0,0 +1,17 @@
+# pdxkbc
+
+![pdxkbc](https://i.imgur.com/GgNvZcW.jpg)
+
+A macropad made for the Portland Keyboard Club and DEF CON
+
+Keyboard Maintainer: [Franklin Harding](https://github.com/fharding1)
+
+Hardware Supported: https://github.com/fharding1/pdxkbc-badge
+
+Hardware Availability: https://github.com/fharding1/pdxkbc-badge
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pdxkbc: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/pdxkbc/rules.mk b/keyboards/pdxkbc/rules.mk
new file mode 100644
index 000000000..bc370be03
--- /dev/null
+++ b/keyboards/pdxkbc/rules.mk
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/phantom/keymaps/default/keymap.c b/keyboards/phantom/keymaps/default/keymap.c
index eb5db022d..d7001f066 100644
--- a/keyboards/phantom/keymaps/default/keymap.c
+++ b/keyboards/phantom/keymaps/default/keymap.c
@@ -41,22 +41,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/phantom/rules.mk b/keyboards/phantom/rules.mk
index 9ce9fd244..c4d5f5759 100644
--- a/keyboards/phantom/rules.mk
+++ b/keyboards/phantom/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/pinky/rules.mk b/keyboards/pinky/rules.mk
index 1c0059d31..14af0703a 100644
--- a/keyboards/pinky/rules.mk
+++ b/keyboards/pinky/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/plaid/rules.mk b/keyboards/plaid/rules.mk
index 507f873ae..c54b1ea58 100644
--- a/keyboards/plaid/rules.mk
+++ b/keyboards/plaid/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega328p
PROTOCOL = VUSB
diff --git a/keyboards/planck/ez/config.h b/keyboards/planck/ez/config.h
index 142382dab..a252b2528 100644
--- a/keyboards/planck/ez/config.h
+++ b/keyboards/planck/ez/config.h
@@ -43,7 +43,6 @@
#define MATRIX_ROW_PINS { A10, A9, A8, B15, C13, C14, C15, A2 }
#define MATRIX_COL_PINS { B11, B10, B2, B1, A7, B0 }
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B12 }
#define ENCODERS_PAD_B { B13 }
diff --git a/keyboards/planck/keymaps/basic/keymap.c b/keyboards/planck/keymaps/basic/keymap.c
index 748d9acbe..4458c32a7 100644
--- a/keyboards/planck/keymaps/basic/keymap.c
+++ b/keyboards/planck/keymaps/basic/keymap.c
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI, M(1), KC_SPC, KC_SPC, M(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Lower
@@ -64,24 +64,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 1:
- if (record->event.pressed) {
- layer_on(1);
- } else {
- layer_off(1);
- }
- break;
- case 2:
- if (record->event.pressed) {
- layer_on(2);
- } else {
- layer_off(2);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index cc090200b..280249a9c 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -46,9 +46,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
@@ -64,9 +64,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
@@ -82,9 +82,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 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 |
@@ -100,9 +100,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
@@ -118,9 +118,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
@@ -136,9 +136,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 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 | | | |
@@ -154,9 +154,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | | Reset| | | | | | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
diff --git a/keyboards/planck/keymaps/dodger/rules.mk b/keyboards/planck/keymaps/dodger/rules.mk
index 981a3e82b..032f5af68 100644
--- a/keyboards/planck/keymaps/dodger/rules.mk
+++ b/keyboards/planck/keymaps/dodger/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/planck/keymaps/dsanchezseco/config.h b/keyboards/planck/keymaps/dsanchezseco/config.h
index 6fa31cc8a..3ed041f3b 100644
--- a/keyboards/planck/keymaps/dsanchezseco/config.h
+++ b/keyboards/planck/keymaps/dsanchezseco/config.h
@@ -1,39 +1,5 @@
#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) \
- }
+ #define STARTUP_SONG SONG(DVORAK_SOUND)
#endif
-
-/*
- * MIDI options
- */
-
-/* Prevent use of disabled MIDI features in the keymap */
-//#define MIDI_ENABLE_STRICT 1
-
-/* enable basic MIDI features:
- - MIDI notes can be sent when in Music mode is on
-*/
-
-#define MIDI_BASIC
-
-/* enable advanced MIDI features:
- - MIDI notes can be added to the keymap
- - Octave shift and transpose
- - Virtual sustain, portamento, and modulation wheel
- - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 2
-
-// Most tactile encoders have detents every 4 stages
-#define ENCODER_RESOLUTION 4
-
diff --git a/keyboards/planck/keymaps/dsanchezseco/keymap.c b/keyboards/planck/keymaps/dsanchezseco/keymap.c
index 90ad2bc59..df560b46c 100644
--- a/keyboards/planck/keymaps/dsanchezseco/keymap.c
+++ b/keyboards/planck/keymaps/dsanchezseco/keymap.c
@@ -1,19 +1,3 @@
-/* Copyright 2015-2017 Jack Humbert
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
#include QMK_KEYBOARD_H
#include "muse.h"
diff --git a/keyboards/planck/keymaps/dvorak2space/config.h b/keyboards/planck/keymaps/dvorak2space/config.h
new file mode 100644
index 000000000..0927fa016
--- /dev/null
+++ b/keyboards/planck/keymaps/dvorak2space/config.h
@@ -0,0 +1,3 @@
+#pragma once
+#define TAPPING_TOGGLE 1
+#define PERMISSIVE_HOLD
diff --git a/keyboards/planck/keymaps/dvorak2space/keymap.c b/keyboards/planck/keymaps/dvorak2space/keymap.c
new file mode 100644
index 000000000..4b0775945
--- /dev/null
+++ b/keyboards/planck/keymaps/dvorak2space/keymap.c
@@ -0,0 +1,242 @@
+#include QMK_KEYBOARD_H
+#include "passwords.c" //Instead of extern just to cut down on compile time. Holds a single array.
+#define MOUSEL KC_BTN1
+#define MOUSER KC_BTN2
+#define CTRLL LCTL(KC_LEFT)
+#define CTRLR LCTL(KC_RGHT)
+#define CAD LCTL(LALT(KC_DEL))
+
+#define BASE_L 0
+#define SHFT_L 1
+#define MOD_L 2
+#define NAV_L 3
+#define AHK_L 4
+#define LOCK_L 5
+#define PASS_L 6
+
+static host_driver_t *host_driver = 0;
+
+enum {
+ HK_SLP = SAFE_RANGE,
+ HK_IF,
+ HK_ELSE,
+ HK_COSL
+};
+
+enum {
+ FB = 0,
+ LPN,
+ RPN,
+ BCK,
+ DSH
+};
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ DOUBLE_HOLD = 4,
+ DOUBLE_SINGLE_TAP = 5, //Distinguishes between double tapping and typing, "tapping", for example. Not sure how accurate it is, and I have no need, so avoiding it at the moment.
+ TRIPLE_TAP = 6,
+ TRIPLE_HOLD = 7
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Base
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | ' | , | . | p | y | f | g | c | r | l | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Nav | a | o | e | u | i | d | h | t | n | s | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shft | ; | q | j | k | x | b | m | w | v | z | Shft |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | RClk | LClk | Ctrl | Space | Modifier | GUI | VolD | VolU |Macros|
+ * `-----------------------------------------------------------------------------------'
+ */
+ [0] = LAYOUT_planck_2x2u(
+ KC_TAB, KC_QUOT,KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, TD(BCK),
+ MO(NAV_L),KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT,
+ KC_LSFT, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_ESC, MOUSER, MOUSEL, KC_LCTL, KC_SPC, MO(MOD_L), KC_LGUI, KC_VOLD, KC_VOLU, OSL(AHK_L)
+ ),
+/* Custom Shifts
+ * ,-----------------------------------------------------------------------------------.
+ * | | | ? | ! | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [1] = LAYOUT_planck_2x2u(
+ KC_TRNS,KC_TRNS,KC_SLSH,KC_1, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_NO, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
+ ),
+/* Modifier
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | + | - | * | / \ | if | else | ( [ | ) ] | { | } | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | ` | < | > | & | | | _ | $ | @ | # | % | ^ | ~ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | Space | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [2] = LAYOUT_planck_2x2u(
+ KC_TRNS,KC_PLUS,TD(DSH),KC_ASTR,TD(FB), HK_IF, HK_ELSE,TD(LPN),TD(RPN),KC_LCBR,KC_RCBR,KC_TRNS,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_GRV, KC_LT, KC_GT, KC_AMPR,KC_PIPE,KC_UNDS,KC_DLR, KC_AT, KC_HASH,KC_PERC,KC_CIRC,LSFT(KC_GRV),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_SPC, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+//Nav
+ [3] = LAYOUT_planck_2x2u(
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME,KC_UP, KC_END, KC_NO, KC_TRNS,
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, CTRLL, KC_LEFT,KC_DOWN,KC_RGHT, CTRLR, KC_TRNS,
+ KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+//AHK-Bindable Macros
+ [4] = LAYOUT_planck_2x2u(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ LCTL(KC_F13),LCTL(KC_F14),LCTL(KC_F15),LCTL(KC_F16),LCTL(KC_F17),LCTL(KC_F18),LCTL(KC_F19),LCTL(KC_F20),LCTL(KC_F21),LCTL(KC_F22),LCTL(KC_F23),LCTL(KC_F24),
+ LSFT(KC_F13),LSFT(KC_F14),LSFT(KC_F15),LSFT(KC_F16),LSFT(KC_F17),LSFT(KC_F18),LSFT(KC_F19),LSFT(KC_F20),LSFT(KC_F21),LSFT(KC_F22),LSFT(KC_F23),LSFT(KC_F24),
+ RESET, LALT(KC_F14),LALT(KC_F15),OSL(PASS_L), CAD, LALT(KC_F19), LALT(KC_F21),LALT(KC_F22),HK_SLP, HK_COSL
+ ),
+//Locked Screen
+ [5] = LAYOUT_planck_2x2u(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, HK_SLP, KC_NO
+ ),
+//Passwords (by first letter of service name, at least better than just one)
+ [6] = LAYOUT_planck_2x2u(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_NO,
+ KC_NO, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_NO,
+ KC_NO, KC_NO, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_NO,
+ KC_NO, KC_NO, KC_NO, HK_COSL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) { //X_KEY doesn't support aliases
+ switch(keycode) {
+ //if shift pressed and not shift layer or released and other shift not pressed
+ //in separate things because MOD_BIT (probably?) isn't toggled until after this returns true and shift is actually toggled
+ case KC_LSFT: //if pressed and not shift layer or released and other shift not pressed
+ if((record->event.pressed && IS_LAYER_OFF(SHFT_L)) || (!record->event.pressed && !(get_mods() & MOD_BIT(KC_RSFT)))) { layer_invert(SHFT_L); }
+ break;
+ case KC_RSFT:
+ if((record->event.pressed && IS_LAYER_OFF(SHFT_L)) || (!record->event.pressed && !(get_mods() & MOD_BIT(KC_LSFT)))) { layer_invert(SHFT_L); }
+ break;
+ case KC_ENT: //won't repeat on hold and I can't find a solution other than hardcoding timers but I kinda prefer it anyway. Swaps enter and shift enter
+ if(record->event.pressed) {
+ (IS_LAYER_ON(SHFT_L)) //if shifted release correct shift, send, and press same shift, else send shift enter
+ ? (get_mods() & MOD_BIT(KC_LSFT))
+ ? SEND_STRING(SS_UP(X_LSHIFT) SS_TAP(X_ENTER) SS_DOWN(X_LSHIFT))
+ : SEND_STRING(SS_UP(X_RSHIFT) SS_TAP(X_ENTER) SS_DOWN(X_RSHIFT))
+ : SEND_STRING(SS_LSFT(SS_TAP(X_ENTER)));
+ }
+ return false;
+ case HK_IF:
+ if(record->event.pressed) { SEND_STRING("if"); }
+ break;
+ case HK_ELSE:
+ if(record->event.pressed) { SEND_STRING("else"); }
+ break;
+ case HK_COSL:
+ clear_keyboard();
+ break;
+ case HK_SLP:
+ if(record->event.pressed) {
+ if(IS_LAYER_OFF(LOCK_L)) {
+ host_driver = host_get_driver();
+ SEND_STRING(SS_LALT(SS_TAP(X_F23)));
+ host_set_driver(0);
+ }
+ else {
+ host_set_driver(host_driver);
+ SEND_STRING(SS_LALT(SS_TAP(X_F24)));
+ }
+ return false;
+ }
+ layer_invert(LOCK_L);
+ if(IS_LAYER_ON(AHK_L))
+ layer_invert(AHK_L);
+ break;
+ default:
+ if(IS_LAYER_ON(PASS_L) && keycode <= KC_Z) {
+ SEND_STRING(passwords[keycode - KC_A]);
+ layer_invert(PASS_L);
+ return false;
+ }
+ }
+ return true;
+};
+
+//tapdance state evaluation
+int cur_dance(qk_tap_dance_state_t *state) {
+ int press = 0;
+ switch(state->count) {
+ case 1:
+ press = (state->interrupted || !state->pressed)
+ ? SINGLE_TAP
+ : SINGLE_HOLD;
+ break;
+ case 2:
+ press = DOUBLE_TAP;
+ break;
+ case 3:
+ press = TRIPLE_TAP;
+ }
+ return press;
+}
+
+void back_tap(qk_tap_dance_state_t *state, void *user_data) { tap_code(KC_BSPACE); }
+
+void back_finished(qk_tap_dance_state_t *state, void *user_data) { if(!(state->interrupted || !state->pressed)) tap_code16(LCTL(KC_BSPACE)); }
+
+void slash_finished(qk_tap_dance_state_t *state, void *user_data) {
+ int td_state = cur_dance(state);
+ switch(td_state) {
+ case SINGLE_TAP:
+ clear_mods();
+ clear_weak_mods();
+ tap_code(KC_SLSH);
+ break;
+ case DOUBLE_TAP:
+ tap_code(KC_NUBS);
+ }
+}
+
+void dash_finished(qk_tap_dance_state_t *state, void *user_data) {
+ int td_state = cur_dance(state);
+ switch(td_state) {
+ case SINGLE_TAP:
+ tap_code(KC_PMNS);
+ break;
+ case SINGLE_HOLD:
+ register_mods(MOD_BIT(KC_LALT));
+ tap_code(KC_KP_0);
+ tap_code(KC_KP_1);
+ tap_code(KC_KP_5);
+ tap_code(KC_KP_1);
+ unregister_mods(MOD_BIT(KC_LALT));
+ break;
+ case DOUBLE_TAP:
+ tap_code(KC_PMNS);
+ tap_code(KC_PMNS);
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [LPN] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
+ [RPN] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
+ [FB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, slash_finished, NULL),
+ [BCK] = ACTION_TAP_DANCE_FN_ADVANCED(back_tap, back_finished, NULL), //each tap, on finished, and reset. Normally register_code on press unregister on reset so keys can be held down.
+ [DSH] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dash_finished, NULL)
+};
diff --git a/keyboards/planck/keymaps/dvorak2space/passwords.c b/keyboards/planck/keymaps/dvorak2space/passwords.c
new file mode 100644
index 000000000..161c564dd
--- /dev/null
+++ b/keyboards/planck/keymaps/dvorak2space/passwords.c
@@ -0,0 +1,28 @@
+char *passwords[26] = {
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+};
diff --git a/keyboards/planck/keymaps/dvorak2space/readme.md b/keyboards/planck/keymaps/dvorak2space/readme.md
new file mode 100644
index 000000000..1844a57f3
--- /dev/null
+++ b/keyboards/planck/keymaps/dvorak2space/readme.md
@@ -0,0 +1,5 @@
+![Keyboard Layout](https://i.imgur.com/9jYjllM.png)
+
+# IsaacElenbaas's Planck Layout
+
+Split spacebar, Dvorak. Bottom right button leads to layer with lots of things to be mapped in AutoHotkey. The ones I use (of which the best are sleep, which turns off the monitors and locks all inputs, rebinding keyboard-only mouse inputs, and redirecting media keys to a specific player) can be found [here.](https://github.com/IsaacElenbaas/personal_scripts/blob/master/Keyboard.ahk) Capslock goes to a right-hand navigation layer, there is a custom layer when holding shift, holding dash gives an em dash, holding backspace deletes a word, and I have a obfuscation-based password system you probably shouldn't use, but the rest is pretty standard.
diff --git a/keyboards/planck/keymaps/dvorak2space/rules.mk b/keyboards/planck/keymaps/dvorak2space/rules.mk
new file mode 100644
index 000000000..59f9f1dff
--- /dev/null
+++ b/keyboards/planck/keymaps/dvorak2space/rules.mk
@@ -0,0 +1,20 @@
+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 = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work. Can make windows not recognize device.
+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
+TAP_DANCE_ENABLE = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/planck/keymaps/handwired_binaryplease/rules.mk b/keyboards/planck/keymaps/handwired_binaryplease/rules.mk
index efe0c7a5d..cf37fa6f3 100644
--- a/keyboards/planck/keymaps/handwired_binaryplease/rules.mk
+++ b/keyboards/planck/keymaps/handwired_binaryplease/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/planck/keymaps/kloki/rules.mk b/keyboards/planck/keymaps/kloki/rules.mk
index 195ad328b..02926bffa 100644
--- a/keyboards/planck/keymaps/kloki/rules.mk
+++ b/keyboards/planck/keymaps/kloki/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/planck/keymaps/mattly/keymap.c b/keyboards/planck/keymaps/mattly/keymap.c
index baa7d9fbf..52ade8643 100644
--- a/keyboards/planck/keymaps/mattly/keymap.c
+++ b/keyboards/planck/keymaps/mattly/keymap.c
@@ -1,166 +1,34 @@
-/* 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,
- _NUMBER,
- _SYMBOL,
- _FUNC,
-};
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE
-};
-
-#define SPC_SHF MT(MOD_LSFT, KC_SPC)
-
-#define ESC_HYP MT(MOD_HYPR, KC_ESC)
-#define TAB_NUM LT(_NUMBER, KC_TAB)
-#define BSP_SYM LT(_SYMBOL, KC_BSPC)
-#define DEL_WRP MT(MOD_LCTL | MOD_LALT | MOD_LGUI, KC_DEL)
-
-#define SYMLOCK TG(_SYMBOL)
-#define NUMLOCK TG(_NUMBER)
-
-#define ONE_CTL OSM(MOD_LCTL)
-#define ONE_ALT OSM(MOD_LALT)
-#define ONE_GUI OSM(MOD_LGUI)
-#define ONE_HYP OSM(MOD_HYPR)
-#define ONE_MEH OSM(MOD_MEH)
-#define ONE_WRP OSM(MOD_LCTL | MOD_LALT | MOD_LGUI)
-#define ONE_WOA OSM(MOD_LCTL | MOD_LGUI | MOD_LSFT)
-#define ONE_DER OSM(MOD_LALT | MOD_LGUI | MOD_LSFT)
-
-#define A_CTRL MT(MOD_LCTL, KC_A)
-#define S_ALT MT(MOD_LALT, KC_S)
-#define D_GUI MT(MOD_LGUI, KC_D)
-#define F_SHFT MT(MOD_LSFT, KC_F)
-#define J_SHFT MT(MOD_RSFT, KC_J)
-#define K_GUI MT(MOD_RGUI, KC_K)
-#define L_ALT MT(MOD_RALT, KC_L)
-#define MINSCTL MT(MOD_RCTL, KC_MINS)
-
-#define ENT_CTL MT(MOD_LCTL, KC_ENT)
-#define LT_ALT MT(MOD_LALT, KC_LEFT)
-#define DN_GUI MT(MOD_LGUI, KC_DOWN)
-#define RT_SHFT MT(MOD_LSFT, KC_RGHT)
-#define N4_SHFT MT(MOD_RSFT, KC_4)
-#define N5_GUI MT(MOD_RGUI, KC_5)
-#define N6_ALT MT(MOD_RALT, KC_6)
-
-#define BWORD LALT(KC_LEFT)
-#define FWORD LALT(KC_RIGHT)
-
-#define NWIN LGUI(KC_GRV)
-#define PWIN LGUI(LSFT(KC_GRV))
-#define NTAB LGUI(LSFT(KC_RBRC))
-#define PTAB LGUI(LSFT(KC_LBRC))
-#define NAVBACK LGUI(KC_LBRC)
-#define NAVFWD LGUI(KC_RBRC)
-
-#define XMSNCTL HYPR(KC_F14)
-#define XDSKTOP HYPR(KC_F15)
-#define XNXTSPC HYPR(KC_F16)
-#define XPRVSPC HYPR(KC_F17)
-#define XNOTIFY HYPR(KC_F18)
+#include "mattly.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Querty
- | # | q | w | e | r | t | y | u | i | o | p | - |
- | | | | | | | | | | | | |
- |------|------|------|------|------|------|------|------|------|------|------|------|
- | ( | a | s | d | f | g | h | j | k | l | ; | ' |
- | | CTRL | ALT | GUI | SHIFT| | | SHIFT| GUI | ALT | CTRL | |
- |------|------|------|------|------|------|------|------|------|------|------|------|
- | [ | z | x | c | v | b | n | m | , | . | / | > |
- | | | | | | | | | | | | |
- |------|------|------|------|------|------|------|------|------|------|------|------|
- | ctrl | alt | gui | Esc | Tab | space | Bksp | Del | hyper| meh | warp |
- | | | | FUNC |NUMBER| SHIFT |SYMBOL| | | | |
- */
[_QWERTY] = LAYOUT_planck_grid(
- KC_HASH, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SCLN,
- KC_LPRN, A_CTRL, S_ALT, D_GUI, F_SHFT, KC_G, KC_H, J_SHFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
- KC_LBRC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RABK,
- NUMLOCK, MO(_FUNC), ONE_MEH, ESC_HYP, TAB_NUM, SPC_SHF, SPC_SHF, BSP_SYM, DEL_WRP, ONE_WRP, ONE_DER, SYMLOCK
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SCLN,
+ KC_CAPS, A_CTRL, S_ALT, D_GUI, F_SHFT, KC_G, KC_H, J_SHFT, K_GUI, L_ALT, MINSCTL, KC_QUOT,
+ XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ XXXXXXX, NAVLOCK, XXXXXXX, ESC_HYP, BSP_NUM, ENT_SFT, SPC_SFT, TAB_SYM, DEL_WRP, XXXXXXX, SYMLOCK, XXXXXXX
),
-/* Symbol
- | | & | ` | ~ | [ | ] | < | > | + | | | | |
- | | $ | % | = | ( | ) | ; | : | ! | @ | _ | |
- | | | ^ | # | { | } | ' | " | | | \ | ? | |
- | | | | | | | .... | | | | |
- */
[_SYMBOL] = LAYOUT_planck_grid(
- KC_ESC, KC_AMPR, KC_GRV, KC_TILD, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_PLUS, KC_ASTR, XXXXXXX, KC_DEL,
- KC_ENT, KC_DLR, KC_PERC, KC_EQL, KC_LPRN, KC_RPRN, KC_SCLN, KC_COLN, KC_EXLM, KC_AT, KC_UNDS, KC_BSPC,
+ _______, KC_AMPR, KC_GRV, KC_TILD, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_PLUS, KC_ASTR, XXXXXXX, _______,
+ _______, KC_DLR, KC_PERC, KC_EQL, KC_LPRN, KC_RPRN, KC_SCLN, KC_COLN, KC_EXLM, KC_AT, KC_UNDS, _______,
_______, XXXXXXX, KC_CIRC, KC_HASH, KC_LCBR, KC_RCBR, KC_QUOT, KC_DQUO, KC_PIPE, KC_BSLS, KC_QUES, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-/* Number
- | | |<-word| up |word->| PgUp | . | 7 | 8 | 9 | + | * |
- | | Enter| left | down | right| PgDn | 0 | 4 | 5 | 6 | - | / |
- | | Bksp | Home | tab | End | Del | , | 1 | 2 | 3 | = | % |
- | | | | | .... | | | | : | $ | |
- */
-[_NUMBER] = LAYOUT_planck_grid(
- XXXXXXX, XXXXXXX, BWORD, KC_UP, FWORD, KC_PGUP, KC_DOT, KC_7, KC_8, KC_9, KC_PLUS, KC_ASTR,
- KC_CAPS, ENT_CTL, LT_ALT, DN_GUI, RT_SHFT, KC_PGDN, KC_0, N4_SHFT, N5_GUI, N6_ALT, MINSCTL, KC_SLSH,
- XXXXXXX, KC_BSPC, KC_HOME, KC_TAB, KC_END, KC_DEL, KC_COMM, KC_1, KC_2, KC_3, KC_EQL, KC_PERC,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, KC_DLR, _______
+
+[_NAVNUM] = LAYOUT_planck_grid(
+ _______, XXXXXXX, BWORD, KC_UP, FWORD, KC_PGUP, KC_DOT, KC_7, KC_8, KC_9, KC_PLUS, KC_ASTR,
+ _______, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_0, KC_4, KC_5, KC_6, KC_MINS, KC_SLSH,
+ _______, KC_BSPC, KC_HOME, KC_TAB, KC_END, KC_DEL, KC_COMM, KC_1, KC_2, KC_3, KC_EQL, KC_PERC,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_COLN, KC_DLR, _______
),
-/* Function
- * | Reset| Mctl | Pspc | Nwin | Nspc | Desk | | F7 | F8 | F9 | F10 | F13 |
- * | Debug| Nctr | Ptab | Pwin | Ntab | Back | Fwd | F4 | F5 | F6 | F11 | F14 |
- * | Mute | Vol- | Vol+ | Trk- | Trk+ | Play | | F1 | F2 | F3 | F12 | F15 |
- * | | | | | | | | | | | | |
- */
-[_FUNC] = LAYOUT_planck_grid(
- RESET, XMSNCTL, XPRVSPC, NWIN, XNXTSPC, XDSKTOP, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F13,
+
+[_FUNCT] = LAYOUT_planck_grid(
+ RESET, XALLWIN, XPRVSPC, NWIN, XNXTSPC, XDESKTP, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F13,
DEBUG, XNOTIFY, PTAB, PWIN, NTAB, NAVBACK, NAVFWD, KC_F4, KC_F5, KC_F6, KC_F11, KC_F14,
KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, KC_MPLY, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F12, KC_F15,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
-#ifdef AUDIO_ENABLE
-#endif
-
-uint32_t layer_state_set_user(uint32_t state) {
- state = update_tri_layer_state(state, _SYMBOL, _NUMBER, _FUNC);
- return state;
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- print("mode just switched to qwerty and this is a huge string\n");
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- }
- return true;
-}
-
diff --git a/keyboards/planck/keymaps/mattly/readme.md b/keyboards/planck/keymaps/mattly/readme.md
index 58f2b979c..4e8c7f17c 100644
--- a/keyboards/planck/keymaps/mattly/readme.md
+++ b/keyboards/planck/keymaps/mattly/readme.md
@@ -1,28 +1 @@
-# Mattly's Planck layout
-
-This planck layout is optimized for, in order:
-
-- moving work from my pinkies to my thumbs
-- writing lisp/clojure code in my evil-mode based emacs setup
-- tapping out messages in chat applications such as slack
-- writing english in markdown files in said emacs
-- navigating mac applications
-- writing english in a web browser on a macintosh
-- writing other programming languages' code in said emacs
-- writing english in other contexts
-- literally anything else
-
-## oddities:
-
-You may notice that `enter` is on a layer. This is an experiment and I kind of
-like it so far, since many programs interpret that keystroke as a "commit"
-of some kind.
-
-## works in progress
-
-I'm trying to figure out how to make some things easier to do with the mouse or
-one-handed. Right now the combo of entering numbers and using a mouse with my
-right hand is kind of annoying. I want to be able to toggle layers on, but only
-from within that layer.
-
-![mattly's keymap](https://lyonheart.us/etc/mattly-keymap.png)
+See my readme in [users/mattly](../../../../../users/mattly/readme.md) \ No newline at end of file
diff --git a/keyboards/planck/keymaps/snowkuma/config.h b/keyboards/planck/keymaps/snowkuma/config.h
new file mode 100644
index 000000000..b41ead838
--- /dev/null
+++ b/keyboards/planck/keymaps/snowkuma/config.h
@@ -0,0 +1,46 @@
+#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
+
+// Settings for homerow mods
+#define TAPPING_TERM 250
+#define IGNORE_MOD_TAP_INTERRUPT
+
+
+// Add the leader key feature
+#define LEADER_TIMEOUT 300
diff --git a/keyboards/planck/keymaps/snowkuma/custom_keycodes.h b/keyboards/planck/keymaps/snowkuma/custom_keycodes.h
new file mode 100644
index 000000000..5e4353c04
--- /dev/null
+++ b/keyboards/planck/keymaps/snowkuma/custom_keycodes.h
@@ -0,0 +1,60 @@
+// These definitions are for convenience.
+// It is not wise to put sensitive information here such as passwords
+// as anyone with access to your keyboard will be able to use them!
+
+// magnet keycodes
+#define M_LEFT LCA(KC_LEFT)
+#define M_TOP LCA(KC_UP)
+#define M_BOTT LCA(KC_DOWN)
+#define M_RGHT LCA(KC_RGHT)
+
+#define M_TOPL LCA(KC_U)
+#define M_TOPR LCA(KC_I)
+#define M_BOTL LCA(KC_J)
+#define M_BOTR LCA(KC_K)
+
+#define M_L13 LCA(KC_D)
+#define M_L23 LCA(KC_E)
+#define M_C13 LCA(KC_F)
+#define M_R23 LCA(KC_T)
+#define M_R13 LCA(KC_G)
+
+#define M_NEXT LCAG(KC_RGHT)
+#define M_PREV LCAG(KC_LEFT)
+
+#define M_MAX LCA(KC_ENT)
+#define M_CEN LCA(KC_C)
+#define M_REST LCA(KC_BSPC)
+
+// Shortcuts
+#define INPUT_L LCAG(KC_SPC)
+#define TXT_PLS LGUI(KC_PLUS)
+#define TXT_MIN LGUI(KC_MINS)
+#define SC_CAPF LGUI(LSFT(KC_3)) // Capture the full screen to file
+#define SC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen to file
+
+// Special Layer keycodes
+#define ESC_NUM LT(_NUMBER, KC_ESC)
+#define BSP_REG LT(_REGEX, KC_BSPC)
+#define DEL_REG LT(_REGEX, KC_DEL)
+#define MIN_ARR LT(_ARRANGE, KC_MINS)
+#define TAB_SFT LSFT_T(KC_TAB)
+#define SPC_SYM LT(_SYMBOL, KC_SPC)
+#define ENT_THU LT(_THUMB, KC_ENT)
+#define FUN_L MO(_FUNCTION)
+
+// HOMEROW SHIFT
+#define T_SFT LSFT_T(KC_T)
+#define N_SFT RSFT_T(KC_N)
+
+// Special Characters
+#define GBP LALT(KC_3)
+#define EURO LALT(S(KC_2))
+
+// Modifier tap holds
+#define Q_CTL LCTL_T(KC_Q)
+#define W_ALT LALT_T(KC_W)
+#define F_GUI LGUI_T(KC_F)
+#define U_GUI LGUI_T(KC_U)
+#define Y_ALT LALT_T(KC_Y)
+#define SCL_CTL LCTL_T(KC_SCLN)
diff --git a/keyboards/planck/keymaps/snowkuma/keymap.c b/keyboards/planck/keymaps/snowkuma/keymap.c
new file mode 100644
index 000000000..eee8e1170
--- /dev/null
+++ b/keyboards/planck/keymaps/snowkuma/keymap.c
@@ -0,0 +1,373 @@
+/* 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/>.
+ */
+
+/* _
+ * ___ _ __ ___ __ __ | | __ _ _ _ __ ___ __ _
+ * / __| | '_ \ / _ \ \ \ /\ / / | |/ / | | | | | '_ ` _ \ / _` |
+ * \__ \ | | | | | (_) | \ V V / | < | |_| | | | | | | | | (_| |
+ * |___/ |_| |_| \___/ \_/\_/ |_|\_\ \__,_| |_| |_| |_| \__,_|
+ *
+ * https://github.com/snowkuma
+ *
+ * version 0.1
+*/
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+#include "custom_keycodes.h"
+#include "my_strings.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _COLEMAK = 0,
+ _SYMBOL,
+ _SFT_NAV,
+ _REGEX,
+ _NUMBER,
+ _ARRANGE,
+ _FUNCTION,
+ _MOUSE,
+ _THUMB
+};
+
+enum planck_keycodes {
+ EMAIL = SAFE_RANGE,
+ EMOJI,
+ EXT_PLV,
+ ITERM,
+ LESSON,
+ TYPE_FU,
+ VS_CODE,
+ VIM
+};
+
+
+// Tap Dance Declarations
+enum {
+ TD_RESET = 0,
+ TD_TILD
+};
+
+// Tap Dance Definitions
+void safe_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >=3) {
+ // Reset the keyboard if you tap the key more than three times
+ reset_keyboard();
+ reset_tap_dance(state);
+ }
+}; void tilde_home(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count > 2) {
+ register_code(KC_LSFT);
+ register_code(KC_GRV);
+ }
+ else {
+ register_code(KC_LSFT);
+ register_code(KC_GRV);
+ if (state->count > 1) {
+ // Outputs ~/ if tilde tapped twice
+ unregister_code(KC_GRV);
+ unregister_code(KC_LSFT);
+ register_code(KC_SLSH);
+ }
+ }
+}
+
+void tilde_reset(qk_tap_dance_state_t *state, void *user_data)
+{
+ if (state->count == 2) {
+ unregister_code(KC_SLSH);
+ } else {
+ unregister_code(KC_GRV);
+ unregister_code(KC_LSFT);
+ }
+}
+
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_RESET] = ACTION_TAP_DANCE_FN (safe_reset),
+ [TD_TILD] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, tilde_home, tilde_reset)
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* COLEMAK
+ *
+ * Base layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | q | w | f | p | g | | | j | l | u | y | ; |
+ * | CTRL | ALT | GUI | | | | | | | GUI | ALT | CTRL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | a | r | s | t | d | | | h | n | e | i | o |
+ * | | | | Shift | | | | | Shift | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | z | x | c | v | b | | | k | m | , | . | ' |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | Esc | BkSp | - | Tab | Space | Enter | | |
+ * | | | | Num | Regex | Arrange| Shift | Sym | Thumb | | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+ */
+[_COLEMAK] = LAYOUT_planck_grid(
+ Q_CTL, W_ALT, F_GUI, KC_P, KC_G, _______, _______, KC_J, KC_L, U_GUI, Y_ALT, SCL_CTL,
+ KC_A, KC_R, KC_S, T_SFT, KC_D, _______, _______, KC_H, N_SFT, KC_E, KC_I, KC_O,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_QUOT,
+ _______, _______, _______, ESC_NUM, BSP_REG, MIN_ARR, TAB_SFT, SPC_SYM, ENT_THU, _______, _______, _______
+),
+
+/* Symbol & Cursor Nav layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | ! | @ | € | & | | | | | | Home | Up | End | PgUp |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ~ | < | % | > | + | | | | Left | Down | Right | PgDn |
+ * | 2x ~/ | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ` | | £ | = | - | | | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | _ | Del | - | | f() | | | | |
+ * | | | | | Mouse | | | Sym |Function| | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+ */
+[_SYMBOL] = LAYOUT_planck_grid(
+ KC_EXLM, KC_AT, EURO, KC_AMPR, KC_PIPE, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP,
+ TD(TD_TILD), KC_LT, KC_PERC, KC_GT, KC_PLUS, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,
+ KC_GRV, _______, GBP, KC_EQL, KC_MINS, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_UNDS, DEL_REG, KC_MINS, _______, _______, _______, _______, _______, _______
+),
+
+/* Regex layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | * | [ | ^ | ] | : |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | ? | ( | $ | ) | / |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | { | # | } | \ |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | f() | | | Space | | | |
+ * | | | | | Regex | | | Mouse | Enter | | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+ */
+[_REGEX] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, KC_ASTR, KC_LBRC, KC_CIRC, KC_RBRC, KC_COLN,
+ _______, _______, _______, _______, _______, _______, _______, KC_QUES, KC_LPRN, KC_DLR, KC_RPRN, KC_SLSH,
+ _______, _______, _______, _______, _______, _______, _______, KC_PIPE, KC_LCBR, KC_HASH, KC_RCBR, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______
+),
+
+/* Number Layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | : | F | E | D | G | | | * | 7 | 8 | 9 | 0 |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | # | C | B | A | + | | | . | 4 | 5 | 6 | / |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | € | x | £ | = | - | | | , | 1 | 2 | 3 | \ |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | f() | | | | | | | | |
+ * | | | | Number | | | | Space | Enter | | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+*
+*/
+[_NUMBER] = LAYOUT_planck_grid(
+ KC_COLN, S(KC_F), S(KC_E), S(KC_D), S(KC_G), _______, _______, KC_ASTR, KC_7, KC_8, KC_9, KC_0,
+ KC_HASH, S(KC_C), S(KC_B), S(KC_A), KC_PLUS, _______, _______, KC_DOT, KC_4, KC_5, KC_6, KC_SLSH,
+ EURO, KC_X, GBP, KC_EQL, KC_MINS, _______, _______, KC_COMM, KC_1, KC_2, KC_3, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Mouse Layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | Ctrl | Alt | GUI | | | | | | | Up | | wUp |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Btn3 | Btn2 | Btn1 | Shift | | | | | Left | Down | Right | wDn |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | f() | | | f() | | | |
+ * | | | | | Mouse | | | Mouse | | | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+*/
+[_MOUSE] = LAYOUT_planck_grid(
+ KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, KC_WH_U,
+ KC_BTN3, KC_BTN2, KC_BTN1, KC_LSFT, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Thumb Layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | Reset | | SC_CAPF| SC_CAPP| | | | |Input L | | | |
+ * | (3x) | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | TypeFu | CMD + | | | | Caps | emoji | iterm | |
+ * | | | | | | | | | Lock | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | VS_Code| Vim | CMD - | | | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | f() | | | |
+ * | | | | | | | | | Thumb | | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+ */
+[_THUMB] = LAYOUT_planck_grid(
+ TD(TD_RESET), _______, SC_CAPF, SC_CAPP, _______, _______, _______, _______, INPUT_L, _______, _______, _______,
+ _______, _______, _______, TYPE_FU, TXT_PLS, _______, _______, _______, KC_CAPS, EMOJI, ITERM, _______,
+ _______, _______, VS_CODE, VIM, TXT_MIN, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Arrange Layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | | | Full | | | | | | Top L | Top | Top R | |
+ * | | | Screen | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | L 1/3 | L 2/3 | C 1/3 | R 2/3 | R 1/3 | | | Prev | Left | Bottom | Right | Next |
+ * | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Restore| | Center | | | | | | Bottom | | Bottom | |
+ * | | | | | | | | | Left | | Right |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | f() | | | | | |
+ * | | | | | | Arrange| | | | | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+*/
+[_ARRANGE] = LAYOUT_planck_grid(
+ _______, _______, M_MAX, _______, _______, _______, _______, _______, M_TOPL, M_TOP, M_TOPR, _______,
+ M_L13, M_L23, M_C13, M_R23, M_R13, _______, _______, M_PREV, M_LEFT, M_BOTT, M_RGHT, M_NEXT,
+ M_REST, _______, M_CEN, _______, _______, _______, _______, _______, M_BOTL, _______, M_BOTR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Function Layer
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * | Ctrl | Alt | GUI | | | | | | F7 | F8 | F9 | F10 |
+ * | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | Shift | | | | | F4 | F5 | F6 | F11 |
+ * | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | F1 | F2 | F3 | F12 |
+ * | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | f() | f() | | | |
+ * | | | | | | | |Function|Function| | | |
+ * `--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
+*/
+[_FUNCTION] = LAYOUT_planck_grid(
+ KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, _______, KC_F13, KC_F7, KC_F8, KC_F9, KC_F10,
+ _______, _______, _______, KC_LSFT, _______, _______, _______, KC_F14, KC_F4, KC_F5, KC_F6, KC_F11,
+ _______, _______, _______, _______, _______, _______, _______, KC_F15, KC_F1, KC_F2, KC_F3, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ state = update_tri_layer_state(state, _SYMBOL, _THUMB, _FUNCTION);
+ state = update_tri_layer_state(state, _SYMBOL, _REGEX, _MOUSE);
+ return state;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case EMAIL:
+ if (record->event.pressed) {
+ SEND_STRING(MY_EMAIL);
+ }
+ return false;
+ break;
+ case ITERM:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI(" "));
+ SEND_STRING("iterm" SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+ case TYPE_FU:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI(" "));
+ SEND_STRING("type fu" SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+ case VIM:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI(" "));
+ SEND_STRING("macvim.app" SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+ case VS_CODE:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI(" "));
+ SEND_STRING("visual studio code" SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+ case EMOJI:
+ if (record->event.pressed) {
+ register_code(KC_LGUI);
+ register_code(KC_LCTL);
+ register_code(KC_SPC);
+ unregister_code(KC_LGUI);
+ unregister_code(KC_LCTL);
+ unregister_code(KC_SPC);
+ }
+ 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 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
+}
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_OSX);
+}
diff --git a/keyboards/planck/keymaps/snowkuma/my_strings.h b/keyboards/planck/keymaps/snowkuma/my_strings.h
new file mode 100644
index 000000000..4e2ee6f77
--- /dev/null
+++ b/keyboards/planck/keymaps/snowkuma/my_strings.h
@@ -0,0 +1,4 @@
+// Email address
+#define MY_EMAIL "myname@email.com"
+// Canned responses
+#define CANNED_1 "A canned response / template for emails."
diff --git a/keyboards/planck/keymaps/snowkuma/readme.md b/keyboards/planck/keymaps/snowkuma/readme.md
new file mode 100644
index 000000000..b1d5ff9c9
--- /dev/null
+++ b/keyboards/planck/keymaps/snowkuma/readme.md
@@ -0,0 +1,14 @@
+# Snowkuma's Planck Layout v.0.1
+
+Wide colemak planck layout. Heavily influenced by the ideas of sdothum and his blog.
+
+Aims to minimize key usage to minimal set and have hands in a comfortable position.
+
+![Colemak](https://i.imgur.com/4B3HdCE.png)
+![Symbol](https://i.imgur.com/WYxIJqv.png)
+![Regex](https://i.imgur.com/PxTCT6P.png)
+![Number](https://i.imgur.com/NzhW26R.png)
+![Arrange](https://i.imgur.com/BlTJjyW.png)
+![Shortcuts](https://i.imgur.com/p2ooSrC.png)
+![Function](https://i.imgur.com/U1F5J3R.png)
+![Mouse](https://i.imgur.com/nCHabXV.png)
diff --git a/keyboards/planck/keymaps/snowkuma/rules.mk b/keyboards/planck/keymaps/snowkuma/rules.mk
new file mode 100644
index 000000000..4a172d286
--- /dev/null
+++ b/keyboards/planck/keymaps/snowkuma/rules.mk
@@ -0,0 +1,19 @@
+SRC += muse.c
+
+AUDIO_ENABLE = yes
+BACKLIGHT_ENABLE = no
+BLUETOOTH_ENABLE = no
+BOOTMAGIC_ENABLE = no
+COMBO_ENABLE = no
+COMMAND_ENABLE = no
+CONSOLE_ENABLE = no
+EXTRAKEY_ENABLE = yes
+LEADER_ENABLE = yes
+MIDI_ENABLE = no
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes # nkey rollover
+RGBLIGHT_ENABLE = no
+SLEEP_LED_ENABLE = no
+STENO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODE_ENABLE = yes
diff --git a/keyboards/planck/keymaps/vaire/rules.mk b/keyboards/planck/keymaps/vaire/rules.mk
index 22e4bd934..f9dfeb726 100644
--- a/keyboards/planck/keymaps/vaire/rules.mk
+++ b/keyboards/planck/keymaps/vaire/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/planck/keymaps/yttyx/config.h b/keyboards/planck/keymaps/yttyx/config.h
new file mode 100644
index 000000000..88d0c07e9
--- /dev/null
+++ b/keyboards/planck/keymaps/yttyx/config.h
@@ -0,0 +1,5 @@
+#pragma once
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/planck/keymaps/yttyx/keymap.c b/keyboards/planck/keymaps/yttyx/keymap.c
new file mode 100644
index 000000000..0fcbae892
--- /dev/null
+++ b/keyboards/planck/keymaps/yttyx/keymap.c
@@ -0,0 +1,146 @@
+
+#include QMK_KEYBOARD_H
+#include <keymap_steno.h>
+
+enum planck_layers {
+ _BA, // Base (Balance Twelve mirror variant)
+ _PL, // Plover (http://opensteno.org)
+ _NP, // Numeric/punctuation
+ _FC // Function/cursor
+};
+
+enum planck_keycodes {
+ BA = SAFE_RANGE,
+ PL
+};
+
+
+// Abbreviations
+#define KX_SFT_Z MT(MOD_LSFT, KC_Z)
+#define KX_SFT_X MT(MOD_RSFT, KC_X)
+#define LT_ESC_FC LT(_FC, KC_ESC)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BA
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | P | L | C | D | W | | | U | O | Y | K | Q |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | N | R | S | T | M | | BS | A | E | I | H | V |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Z Sft | J | F | G | B | | Ent | ' @ | , < | . > | X Sft | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Ctl | Alt | Sup | NP | Spc | Esc/FC | Sft | Sft | Sup | Alt | Ctl | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+ */
+ [_BA] = LAYOUT_planck_grid(
+ KC_P, KC_L, KC_C, KC_D, KC_W, XXXXXXX, XXXXXXX, KC_U, KC_O, KC_Y, KC_K, KC_Q,
+ KC_N, KC_R, KC_S, KC_T, KC_M, XXXXXXX, KC_BSPC, KC_A, KC_E, KC_I, KC_H, KC_V,
+ KX_SFT_Z, KC_J, KC_F, KC_G, KC_B, XXXXXXX, KC_ENT, KC_QUOT, KC_COMM, KC_DOT, KX_SFT_X, XXXXXXX,
+ KC_LCTL, KC_LALT, KC_LGUI, MO(_NP), KC_SPC, LT_ESC_FC, KC_LSFT, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, XXXXXXX
+ ),
+
+ /* Plover
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | # | # | # | # | # | BA | # | # | # | # | # | # |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | S | T | P | H | * | | * | F | P | L | T | D |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | S | K | W | R | * | | * | R | B | G | S | Z |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | | | | A | O | | E | U | | | | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+ */
+ [_PL] = LAYOUT_planck_grid(
+ STN_NUM, STN_NUM, STN_NUM, STN_NUM, STN_NUM, BA, STN_NUM, STN_NUM, STN_NUM, STN_NUM, STN_NUM, STN_NUM,
+ STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, XXXXXXX, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, XXXXXXX, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ XXXXXXX, XXXXXXX, XXXXXXX, STN_A, STN_O, XXXXXXX, STN_E, STN_U, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ /* Numeric/punctuation
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | 1 ! | 2 " | 3 | 4 $ | 5 % | PL | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Tab | Ctl-X | Ctl-C | Ctl-V | Ctl-Z | | BS | [ { | ] } | - _ | ; : | \ | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Sft | | | Del | Ins | | | / ? | = + | # ~ | ` | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Ctl | Alt | Sup | NP | Spc | | Sft | Sft | Sup | Alt | Ctl | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+ */
+ [_NP] = LAYOUT_planck_grid(
+ KC_1, KC_2, KC_3, KC_4, KC_5, PL, XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_TAB, C(KC_X), C(KC_C), C(KC_V), C(KC_Z), XXXXXXX, _______, KC_LBRC, KC_RBRC, KC_MINS, KC_SCLN, KC_NUBS,
+ KC_LSFT, XXXXXXX, XXXXXXX, KC_DEL, KC_INS, XXXXXXX, XXXXXXX, KC_SLSH, KC_EQL, KC_NUHS, KC_GRV, XXXXXXX,
+ _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, XXXXXXX
+ ),
+
+ /* Function/cursor
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | F1 | F2 | F3 | F4 | F5 | | | Home | Up | End | PgUp | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | F6 | F7 | F8 | F9 | F10 | | | Left | Down | Right | PgDn | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Sft | | | F11 | F12 | | | PScr | Break | ScLk | Caps | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Ctl | Alt | Sup | | Spc | | Sft | Sft | Sup | Alt | Ctl | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+ */
+ [_FC] = LAYOUT_planck_grid(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX,
+ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_PSCR, KC_BRK, KC_SLCK, KC_CAPS, XXXXXXX,
+ _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, XXXXXXX
+ )
+
+};
+
+
+#ifdef AUDIO_ENABLE
+ float plover_on[][2] = SONG(PLOVER_SOUND);
+ float plover_off[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case PL:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_on);
+ #endif
+
+ layer_off(_NP);
+ layer_off(_FC);
+ layer_on(_PL);
+
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ case BA:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_off);
+ #endif
+
+ layer_off(_NP);
+ layer_off(_PL);
+ layer_off(_FC);
+ }
+ return false;
+ }
+ return true;
+}
+
+void matrix_init_user() {
+ steno_set_mode(STENO_MODE_GEMINI);
+}
+
diff --git a/keyboards/planck/keymaps/yttyx/readme.md b/keyboards/planck/keymaps/yttyx/readme.md
new file mode 100644
index 000000000..6661c3170
--- /dev/null
+++ b/keyboards/planck/keymaps/yttyx/readme.md
@@ -0,0 +1,68 @@
+# Overview
+
+* Base layer uses the Balance Twelve layout ([reference](https://mathematicalmulticore.wordpress.com/the-keyboard-layout-project/))
+* Plover layer uses the same home position as the base layer ([reference](http://www.openstenoproject.org/))
+
+## To build
+
+```
+make planck/rev6:yttyx
+```
+
+## To build and flash
+
+```
+make planck/rev6:yttyx:dfu-util
+```
+
+## Layers
+
+### Base
+
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | P | L | C | D | W | | | U | O | Y | K | Q |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | N | R | S | T | M | | BS | A | E | I | H | V |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Z Sft | J | F | G | B | | Ent | ' @ | , < | . > | X Sft | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Ctl | Alt | Sup | NP | Spc | Esc/FC | Sft | Sft | Sup | Alt | Ctl | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+
+### Plover
+
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | # | # | # | # | # | BA | # | # | # | # | # | # |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | S | T | P | H | * | | * | F | P | L | T | D |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | S | K | W | R | * | | * | R | B | G | S | Z |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | | | | A | O | | E | U | | | | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+
+### Numeric/Punctuation
+
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | 1 ! | 2 " | 3 £ | 4 $ | 5 % | PL | | 6 ^ | 7 & | 8 * | 9 ( | 0 ) |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Tab | Ctl-X | Ctl-C | Ctl-V | Ctl-Z | | BS | [ { | ] } | - _ | ; : | \ | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Sft | | | Del | Ins | | | / ? | = + | # ~ | ` | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Ctl | Alt | Sup | NP | Spc | | Sft | Sft | Sup | Alt | Ctl | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+
+### Function
+
+ .--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.--------.
+ | F1 | F2 | F3 | F4 | F5 | | | Home | Up | End | PgUp | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | F6 | F7 | F8 | F9 | F10 | | | Left | Down | Right | PgDn | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Sft | | | F11 | F12 | | | PScr | Break | ScLk | Caps | |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | Ctl | Alt | Sup | | Spc | | Sft | Sft | Sup | Alt | Ctl | |
+ '--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'--------'
+
+
diff --git a/keyboards/planck/keymaps/yttyx/rules.mk b/keyboards/planck/keymaps/yttyx/rules.mk
new file mode 100644
index 000000000..27dac6d4d
--- /dev/null
+++ b/keyboards/planck/keymaps/yttyx/rules.mk
@@ -0,0 +1,11 @@
+# Build Options
+AUDIO_ENABLE = yes
+CONSOLE_ENABLE = no
+EXTRAKEY_ENABLE = no
+MIDI_ENABLE = no
+MOUSEKEY_ENABLE = no
+NKRO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+STENO_ENABLE = yes
+VIRTSER_ENABLE = yes
+
diff --git a/keyboards/planck/rev6/config.h b/keyboards/planck/rev6/config.h
index 841a62190..3354c3f80 100644
--- a/keyboards/planck/rev6/config.h
+++ b/keyboards/planck/rev6/config.h
@@ -43,7 +43,6 @@
* #define UNUSED_PINS
*/
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B12 }
#define ENCODERS_PAD_B { B13 }
diff --git a/keyboards/preonic/rev1/rules.mk b/keyboards/preonic/rev1/rules.mk
index b0d44db82..128deb0c8 100644
--- a/keyboards/preonic/rev1/rules.mk
+++ b/keyboards/preonic/rev1/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/preonic/rev2/rules.mk b/keyboards/preonic/rev2/rules.mk
index 748979c79..53411647d 100644
--- a/keyboards/preonic/rev2/rules.mk
+++ b/keyboards/preonic/rev2/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/preonic/rev3/config.h b/keyboards/preonic/rev3/config.h
index b2a53ee65..2d2993455 100644
--- a/keyboards/preonic/rev3/config.h
+++ b/keyboards/preonic/rev3/config.h
@@ -43,7 +43,6 @@
* #define UNUSED_PINS
*/
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { B12 }
#define ENCODERS_PAD_B { B13 }
diff --git a/keyboards/primekb/prime_e/keymaps/jetpacktuxedo/keymap.c b/keyboards/primekb/prime_e/keymaps/jetpacktuxedo/keymap.c
new file mode 100644
index 000000000..134d09c6b
--- /dev/null
+++ b/keyboards/primekb/prime_e/keymaps/jetpacktuxedo/keymap.c
@@ -0,0 +1,79 @@
+/* Copyright 2018 Holten Campbell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_DEL,
+ LT(2, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(2, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, LT(3, KC_B), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(1, KC_SPC), KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = 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_TRNS,
+ KC_TRNS, KC_MINS, KC_EQL, KC_SCLN, KC_QUOT, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = 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_TRNS,
+ KC_TRNS, KC_UNDS, KC_PLUS, KC_COLN, KC_DQUO, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_DQUO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+void matrix_init_user(void) {
+ // set CapsLock LED to output and low
+ setPinOutput(B1);
+ writePinLow(B1);
+ // set NumLock LED to output and low
+ setPinOutput(B2);
+ writePinLow(B2);
+ // set ScrollLock LED to output and low
+ setPinOutput(B3);
+ writePinLow(B3);
+}
+
+//function for layer indicator LED
+uint32_t layer_state_set_user(uint32_t state)
+{
+ if (state & (1<<1)) {
+ writePinHigh(B1);
+ } else {
+ writePinLow(B1);
+ }
+ if (state & (1<<2)) {
+ writePinHigh(B2);
+ } else {
+ writePinLow(B2);
+ }
+ if (state & (1<<3)) {
+ writePinHigh(B3);
+ } else {
+ writePinLow(B3);
+ }
+ return state;
+}
diff --git a/keyboards/primekb/prime_r/keymaps/default/keymap.c b/keyboards/primekb/prime_r/keymaps/default/keymap.c
index 2e620c9cb..afff0d7da 100644
--- a/keyboards/primekb/prime_r/keymaps/default/keymap.c
+++ b/keyboards/primekb/prime_r/keymaps/default/keymap.c
@@ -53,14 +53,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
void matrix_init_user(void) {
}
diff --git a/keyboards/quantrik/kyuu/rules.mk b/keyboards/quantrik/kyuu/rules.mk
index 3229957d9..f8667d280 100644
--- a/keyboards/quantrik/kyuu/rules.mk
+++ b/keyboards/quantrik/kyuu/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/qwertyydox/rules.mk b/keyboards/qwertyydox/rules.mk
index 8c6171bc0..7cc070ba5 100644
--- a/keyboards/qwertyydox/rules.mk
+++ b/keyboards/qwertyydox/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/readme.md b/keyboards/readme.md
index 8b6e40721..db2a18cc9 100644
--- a/keyboards/readme.md
+++ b/keyboards/readme.md
@@ -59,5 +59,6 @@ These keyboards are part of the QMK repository, but their manufacturers are not
* [TheVan 44](/keyboards/tv44) &mdash; A 44-key staggered keybard by Evangs.
* [WhiteFox](/keyboards/whitefox) &mdash; A 65% keyboard designed as a partnership by matt3o, Massdrop and Input Club
* [Vision Division](/keyboards/vision_division) &mdash; Full Size / Split Linear Keyboard by IBNobody.
+* [XD004](/keyboards/xd004) &mdash; 1x4 macro keyboard sold by KPrepublic.
* [XD75](/keyboards/xd75) &mdash; 15x5 ortholinear keyboard by XIUDI.
* [YMDK NP21](/keyboards/ymdk_np21) &mdash; ps2avrGB based number pad (numpad) sold by YMDK on Aliexpress.
diff --git a/keyboards/redox/rules.mk b/keyboards/redox/rules.mk
index c0edb5428..81c0694e0 100644
--- a/keyboards/redox/rules.mk
+++ b/keyboards/redox/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/redox_w/rules.mk b/keyboards/redox_w/rules.mk
index f2f73d5c5..eb4bad194 100644
--- a/keyboards/redox_w/rules.mk
+++ b/keyboards/redox_w/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/rgbkb/sol/config.h b/keyboards/rgbkb/sol/config.h
index 1afd973e9..23f4503bf 100644
--- a/keyboards/rgbkb/sol/config.h
+++ b/keyboards/rgbkb/sol/config.h
@@ -36,7 +36,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 }
// Encoder support
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { D2 }
#define ENCODERS_PAD_B { D6 }
diff --git a/keyboards/rgbkb/sol/rules.mk b/keyboards/rgbkb/sol/rules.mk
index 62dd969aa..a3dcfc290 100644
--- a/keyboards/rgbkb/sol/rules.mk
+++ b/keyboards/rgbkb/sol/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/rgbkb/zen/rev2/config.h b/keyboards/rgbkb/zen/rev2/config.h
index b9f3d2228..c2bb360bd 100644
--- a/keyboards/rgbkb/zen/rev2/config.h
+++ b/keyboards/rgbkb/zen/rev2/config.h
@@ -41,8 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { C6, E6, B5, D7, B4 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B3, B1, B2 }
-#define NUMBER_OF_ENCODERS 1
-
#define ENCODERS_PAD_A { D4 }
#define ENCODERS_PAD_B { D2 }
diff --git a/keyboards/rgbkb/zygomorph/rev1/config.h b/keyboards/rgbkb/zygomorph/rev1/config.h
index ad58761cc..6e55a6a5f 100644
--- a/keyboards/rgbkb/zygomorph/rev1/config.h
+++ b/keyboards/rgbkb/zygomorph/rev1/config.h
@@ -40,7 +40,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SOFT_SERIAL_PIN D3
-#define NUMBER_OF_ENCODERS 1
#define ENCODERS_PAD_A { D2 }
#define ENCODERS_PAD_B { D7 }
diff --git a/keyboards/ropro/config.h b/keyboards/ropro/config.h
new file mode 100644
index 000000000..5079217f9
--- /dev/null
+++ b/keyboards/ropro/config.h
@@ -0,0 +1,58 @@
+#pragma once
+
+/* Copyright 2019 Garret G. (TheRoyalSweatshirt)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 0x0002
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Kingly-Keys
+#define PRODUCT The_RoPro
+#define DESCRIPTION A 75-key ortholinear keyboard with rotary encoder
+
+ /* key matrix size */
+#define MATRIX_ROWS 7
+#define MATRIX_COLS 14
+
+#define ENCODERS_PAD_A { B7 }
+#define ENCODERS_PAD_B { D5 }
+
+ /* key matrix pins */
+#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, F1, NO_PIN }
+#define MATRIX_COL_PINS { F0, D1, D0, D4, C6, D7, E6, B4, B5, B3, B2, B6, D2, C7 }
+#define UNUSED_PINS
+
+ /* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+ /* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+ /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+ /* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* ws2812 RGB LED --- DIN Pin Routed to VIA on main PCB marked "RGB" */
+#define RGB_DI_PIN D3
+
+#define RGBLIGHT_ANIMATIONS
+
+#define RGBLED_NUM 16
diff --git a/keyboards/ropro/info.json b/keyboards/ropro/info.json
new file mode 100644
index 000000000..f7b62f664
--- /dev/null
+++ b/keyboards/ropro/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "ropro",
+ "url": "https://github.com/TheRoyalSweatshirt/The_RoPro",
+ "maintainer": "[TheRoyalSweatshirt](https://github.com/TheRoyalSweatshirt)",
+ "width": 13,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 76,
+ "layout": [{"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":"Esc", "x":1, "y":1}, {"label":"1", "x":2, "y":1}, {"label":"2", "x":3, "y":1}, {"label":"3", "x":4, "y":1}, {"label":"4", "x":5, "y":1}, {"label":"5", "x":6, "y":1}, {"label":"6;", "x":7, "y":1}, {"label":"7", "x":8, "y":1}, {"label":"8", "x":9, "y":1}, {"label":"9", "x":10, "y":1}, {"label":"0", "x":11, "y":1}, {"label":"-", "x":12, "y":1}, {"label":"CAPS", "x":0, "y":2}, {"label":"Tab", "x":1, "y":2}, {"label":"Q", "x":2, "y":2}, {"label":"W", "x":3, "y":2}, {"label":"E", "x":4, "y":2}, {"label":"R", "x":5, "y":2}, {"label":"T", "x":6, "y":2}, {"label":"Y", "x":7, "y":2}, {"label":"U", "x":8, "y":2}, {"label":"I", "x":9, "y":2}, {"label":"O", "x":10, "y":2}, {"label":"P", "x":11, "y":2}, {"label":"Bksp", "x":12, "y":2}, {"label":"PgUp", "x":0, "y":3}, {"label":"Ctrl", "x":1, "y":3}, {"label":"A", "x":2, "y":3}, {"label":"S", "x":3, "y":3}, {"label":"D", "x":4, "y":3}, {"label":"F", "x":5, "y":3}, {"label":"G", "x":6, "y":3}, {"label":"H;", "x":7, "y":3}, {"label":"J", "x":8, "y":3}, {"label":"K", "x":9, "y":3}, {"label":"L", "x":10, "y":3}, {"label":";", "x":11, "y":3}, {"label":"'", "x":12, "y":3}, {"label":"Home", "x":0, "y":4}, {"label":"Shift", "x":1, "y":4}, {"label":"Z", "x":2, "y":4}, {"label":"X", "x":3, "y":4}, {"label":"C", "x":4, "y":4}, {"label":"V", "x":5, "y":4}, {"label":"B", "x":6, "y":4}, {"label":"N", "x":7, "y":4}, {"label":"M", "x":8, "y":4}, {"label":",", "x":9, "y":4}, {"label":".", "x":10, "y":4}, {"label":"/", "x":11, "y":4}, {"label":"Enter", "x":12, "y":4}, {"label":"PgDn", "x":0, "y":5}, {"label":"Del", "x":1, "y":5}, {"label":"Ctrl", "x":2, "y":5}, {"label":"GUI", "x":3, "y":5}, {"label":"Alt", "x":4, "y":5}, {"label":"Lower", "x":5, "y":5}, {"x":6, "y":5}, {"x":7, "y":5}, {"label":"End", "x":8, "y":5}, {"label":"Left", "x":9, "y":5}, {"label":"Down", "x":10, "y":5}, {"label":"Up", "x":11, "y":5}, {"label":"Right", "x":12, "y":5}]
+ }
+ }
+}
diff --git a/keyboards/ropro/keymaps/default/keymap.c b/keyboards/ropro/keymaps/default/keymap.c
new file mode 100644
index 000000000..6e6da8f9a
--- /dev/null
+++ b/keyboards/ropro/keymaps/default/keymap.c
@@ -0,0 +1,85 @@
+/* Copyright 2019 Garret G. (TheRoyalSweatshirt)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _LOWER
+};
+
+#define LOWER MO(_LOWER)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |+------+------+------+------+-----+------+------+------+------+------+------+------|--------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | Rotary Click |
+ * ,------+------+------+------+------+------+------+------+------+------+------+------+------|--------------'
+ * | PgUp | Ctrl | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Lower| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | PgDn | Del | Ctrl | GUI | ALT |Lower |SPACE |SPACE | End | Left | Down | Up |Right |
+ * `------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+KC_CAPS, 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_PGUP, KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ LOWER, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_PGDN, KC_DEL, KC_RCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* LOWER
+ * ,-----------------------------------------------------------------------------------.
+ * |TOGRGB| | | |Sat(-)|Hue(-)|Hue(+)|Sat(+)| | |Brght-|Brght+|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ` | | | | | | | | | | | = |
+ * |+------+------+------+------+-----+------+------+------+------+------+------+------|--------------.
+ * | | | Up | | | | | | | [ | ] | \ | NumLock |
+ * ,------+------+------+------+------+------+------+------+------+------+------+------+------|--------------'
+ * | Home | | Left | Down |Right | | | | | | | | |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | End | | | | | | | | | | | |PrScn |
+ * `------------------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT(
+ RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_HUD, RGB_HUI, RGB_SAI, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI,
+ KC_GRAVE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_EQUAL,
+KC_NLCK, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_HOME, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_WH_L);
+ } else {
+ tap_code(KC_WH_R);
+ }
+ }
+}
diff --git a/keyboards/ropro/keymaps/default/readme.md b/keyboards/ropro/keymaps/default/readme.md
new file mode 100644
index 000000000..5d7ff3dcc
--- /dev/null
+++ b/keyboards/ropro/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The BASE Layout for the RoPro
diff --git a/keyboards/ropro/readme.md b/keyboards/ropro/readme.md
new file mode 100644
index 000000000..0a90c87f8
--- /dev/null
+++ b/keyboards/ropro/readme.md
@@ -0,0 +1,16 @@
+The RoPro
+===
+
+![The_RoPro](https://i.imgur.com/hfOzBPI.jpg)
+
+A Compact 75-Key + Rotary Encoder Ortholinear keyboard by [Garret G.](https://github.com/TheRoyalSweatshirt) a.k.a. [/u/The_Royal](https://www.reddit.com/user/The_Royal)
+
+Keyboard Maintainer: [Garret G.](https://github.com/TheRoyalSweatshirt)
+Hardware Supported: The_RoPro rev1.0, rev1.5, rev2.0 PCB; Elite-C & Proton-C Compatible.
+Hardware Availability: [Kingly-Keys.xyz](https://kingly-keys.xyz/) - (Through GB or when in stock)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ropro:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs)
diff --git a/keyboards/ropro/ropro.c b/keyboards/ropro/ropro.c
new file mode 100644
index 000000000..ccb1ed0df
--- /dev/null
+++ b/keyboards/ropro/ropro.c
@@ -0,0 +1 @@
+#include "ropro.h"
diff --git a/keyboards/ropro/ropro.h b/keyboards/ropro/ropro.h
new file mode 100644
index 000000000..cb635cff3
--- /dev/null
+++ b/keyboards/ropro/ropro.h
@@ -0,0 +1,39 @@
+/* Copyright 2019 Garret G. (TheRoyalSweatshirt)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Note: Matrix is a little wacky with the rotary encoder click mapping being
+ * on the opposite side of the board. Remember to pay attention to
+ * the 13th column where the lone key mapped for rotary encoder click (K132).
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K10, K20, K30, K40, K50, K60, K70, K80, K90, K100, K110, K120, \
+ K11, K21, K31, K41, K51, K61, K71, K81, K91, K101, K111, K121, \
+ K132, K12, K22, K32, K42, K52, K62, K72, K82, K92, K102, K112, K122, \
+ K03, K13, K23, K33, K43, K53, K63, K73, K83, K93, K103, K113, K123, \
+ K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, K104, K114, K124, \
+ K05, K15, K25, K35, K45, K55, K65, K75, K85, K95, K105, K115, K125 \
+) { \
+ { KC_NO, K10, K20, K30, K40, K50, K60, K70, K80, K90, K100, K110, K120, KC_NO }, \
+ { KC_NO, K11, K21, K31, K41, K51, K61, K71, K81, K91, K101, K111, K121, KC_NO }, \
+ { KC_NO, K12, K22, K32, K42, K52, K62, K72, K82, K92, K102, K112, K122, K132 }, \
+ { K03, K13, K23, K33, K43, K53, K63, K73, K83, K93, K103, K113, K123, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, K104, K114, K124, KC_NO }, \
+ { K05, K15, K25, K35, K45, K55, K65, K75, K85, K95, K105, K115, K125, KC_NO } \
+}
diff --git a/keyboards/ropro/rules.mk b/keyboards/ropro/rules.mk
new file mode 100644
index 000000000..c63f62146
--- /dev/null
+++ b/keyboards/ropro/rules.mk
@@ -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 = caterina
+
+
+# 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
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+ENCODER_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+LAYOUTS_HAS_RGB = yes
diff --git a/keyboards/runner3680/3x6/config.h b/keyboards/runner3680/3x6/config.h
index 0af32f26a..d3f3605f5 100644
--- a/keyboards/runner3680/3x6/config.h
+++ b/keyboards/runner3680/3x6/config.h
@@ -26,8 +26,8 @@
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
-#define MATRIX_COLS 8
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 6
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7 }
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 70
+#define RGBLED_NUM 36
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 35, 35 } // Number of LEDs
+#define RGBLED_SPLIT { 18, 18 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/3x7/config.h b/keyboards/runner3680/3x7/config.h
index 4c864f1d0..e0e6ae8e0 100644
--- a/keyboards/runner3680/3x7/config.h
+++ b/keyboards/runner3680/3x7/config.h
@@ -26,8 +26,8 @@
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
-#define MATRIX_COLS 8
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 7
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7 }
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 70
+#define RGBLED_NUM 42
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 35, 35 } // Number of LEDs
+#define RGBLED_SPLIT { 21, 21 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/3x8/config.h b/keyboards/runner3680/3x8/config.h
index 696b7f905..0d4e3296a 100644
--- a/keyboards/runner3680/3x8/config.h
+++ b/keyboards/runner3680/3x8/config.h
@@ -26,7 +26,7 @@
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
+#define MATRIX_ROWS 6
#define MATRIX_COLS 8
// wiring of each half
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 80
+#define RGBLED_NUM 48
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 40, 40 } // Number of LEDs
+#define RGBLED_SPLIT { 24, 24 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/4x6/config.h b/keyboards/runner3680/4x6/config.h
index 1e3af6b52..08838d1b6 100644
--- a/keyboards/runner3680/4x6/config.h
+++ b/keyboards/runner3680/4x6/config.h
@@ -26,8 +26,8 @@
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
-#define MATRIX_COLS 8
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 70
+#define RGBLED_NUM 48
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 35, 35 } // Number of LEDs
+#define RGBLED_SPLIT { 24, 24 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/4x7/config.h b/keyboards/runner3680/4x7/config.h
index c9a744d07..f33f8f9f2 100644
--- a/keyboards/runner3680/4x7/config.h
+++ b/keyboards/runner3680/4x7/config.h
@@ -26,8 +26,8 @@
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
-#define MATRIX_COLS 8
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 70
+#define RGBLED_NUM 56
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 35, 35 } // Number of LEDs
+#define RGBLED_SPLIT { 28, 28 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/4x8/config.h b/keyboards/runner3680/4x8/config.h
index 55626b6bc..d85ebb29c 100644
--- a/keyboards/runner3680/4x8/config.h
+++ b/keyboards/runner3680/4x8/config.h
@@ -26,7 +26,7 @@
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
+#define MATRIX_ROWS 8
#define MATRIX_COLS 8
// wiring of each half
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 80
+#define RGBLED_NUM 64
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 40, 40 } // Number of LEDs
+#define RGBLED_SPLIT { 32, 32 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/5x6/config.h b/keyboards/runner3680/5x6/config.h
index e7956555f..ae3853a8e 100644
--- a/keyboards/runner3680/5x6/config.h
+++ b/keyboards/runner3680/5x6/config.h
@@ -27,7 +27,7 @@
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
-#define MATRIX_COLS 8
+#define MATRIX_COLS 6
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
@@ -51,9 +51,10 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 70
+#define RGBLED_NUM 60
#define RGBLIGHT_SPLIT
-#define RGBLED_SPLIT { 35, 35 } // Number of LEDs
+#define RGBLED_SPLIT { 30, 30 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/5x7/config.h b/keyboards/runner3680/5x7/config.h
index ba5763a8a..1d56608e6 100644
--- a/keyboards/runner3680/5x7/config.h
+++ b/keyboards/runner3680/5x7/config.h
@@ -27,7 +27,7 @@
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
-#define MATRIX_COLS 8
+#define MATRIX_COLS 7
// wiring of each half
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
@@ -54,6 +54,7 @@
#define RGBLED_NUM 70
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 35, 35 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/5x8/config.h b/keyboards/runner3680/5x8/config.h
index 5c3066bf7..5349fa06a 100644
--- a/keyboards/runner3680/5x8/config.h
+++ b/keyboards/runner3680/5x8/config.h
@@ -54,6 +54,7 @@
#define RGBLED_NUM 80
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 40, 40 } // Number of LEDs
+#define RGBLIGHT_LIMIT_VAL 100
#define SOFT_SERIAL_PIN D2
#define SELECT_SOFT_SERIAL_SPEED 1
diff --git a/keyboards/runner3680/rules.mk b/keyboards/runner3680/rules.mk
index 1342a9f59..624dd2e50 100644
--- a/keyboards/runner3680/rules.mk
+++ b/keyboards/runner3680/rules.mk
@@ -38,10 +38,10 @@ BOOTLOADER = caterina
# 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
+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
diff --git a/keyboards/satan/keymaps/isoHHKB/keymap.c b/keyboards/satan/keymaps/isoHHKB/keymap.c
index 701095907..46d66e5db 100644
--- a/keyboards/satan/keymaps/isoHHKB/keymap.c
+++ b/keyboards/satan/keymaps/isoHHKB/keymap.c
@@ -10,8 +10,10 @@
#define _BL 0
#define _FL 1
-#define KC_ENYE M(0)
-#define KC_CEDL M(1)
+enum custom_keycodes {
+ KC_ENYE = SAFE_RANGE,
+ KC_CEDL
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
@@ -93,14 +95,28 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
}
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
- switch(id) {
- case 0: // Ñ
- return MACRO(D(LALT), T(KP_0), T(KP_2), T(KP_4), T(KP_1), U(LALT), END);
- case 1: // Ç
- return MACRO(D(LALT), T(KP_0), T(KP_2), T(KP_3), T(KP_1), U(LALT), END);
+ switch(keycode) {
+ case KC_ENYE: // Ñ
+ register_code16(KC_LALT);
+ tap_code(KC_KP_0);
+ tap_code(KC_KP_2);
+ tap_code(KC_KP_4);
+ tap_code(KC_KP_1);
+ unregister_code16(KC_LALT);
+ return false;
+ case KC_CEDL: // Ç
+ register_code16(KC_LALT);
+ tap_code(KC_KP_0);
+ tap_code(KC_KP_2);
+ tap_code(KC_KP_3);
+ tap_code(KC_KP_1);
+ unregister_code16(KC_LALT);
+ return false;
+ default:
+ return true;
}
}
- return MACRO_NONE;
+ return true;
};
diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c
index f05c46ff9..a21f83505 100644
--- a/keyboards/satan/keymaps/iso_split_rshift/keymap.c
+++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c
@@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PSCR, KC_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_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
- _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, RALT(KC_SPC),_______, _______, _______, _______, KC_VOLU, _______, \
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
/* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
@@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
_______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
- _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, _______, A(KC_F2), _______, _______, _______, _______, KC_PGUP, _______, \
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
/* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
@@ -113,21 +113,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- return (record->event.pressed ?
- MACRO( D(RALT), T(SPC), U(RALT), END )
- :MACRO( END ));
- break;
- case 1:
- return (record->event.pressed ?
- MACRO( D(LALT), T(F2), U(LALT), END )
- :MACRO( END ));
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/scarletbandana/keymaps/default/keymap.c b/keyboards/scarletbandana/keymaps/default/keymap.c
index 3d4c96160..55d8f07c1 100644
--- a/keyboards/scarletbandana/keymaps/default/keymap.c
+++ b/keyboards/scarletbandana/keymaps/default/keymap.c
@@ -82,21 +82,6 @@ void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
}
}
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
#ifdef AUDIO_ENABLE
float tone_qwerty[][2] = SONG(QWERTY_SOUND);
diff --git a/keyboards/scarletbandana/rules.mk b/keyboards/scarletbandana/rules.mk
index 2767697c5..de3ac9518 100644
--- a/keyboards/scarletbandana/rules.mk
+++ b/keyboards/scarletbandana/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/scythe/config.h b/keyboards/scythe/config.h
index 66d47c356..d577192db 100644
--- a/keyboards/scythe/config.h
+++ b/keyboards/scythe/config.h
@@ -114,13 +114,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-/* 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
diff --git a/keyboards/scythe/rules.mk b/keyboards/scythe/rules.mk
index 1ad80dc89..f0beca71e 100644
--- a/keyboards/scythe/rules.mk
+++ b/keyboards/scythe/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/sentraq/s60_x/default/rules.mk b/keyboards/sentraq/s60_x/default/rules.mk
index af43bf6c5..b3fb86179 100644
--- a/keyboards/sentraq/s60_x/default/rules.mk
+++ b/keyboards/sentraq/s60_x/default/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -65,4 +62,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
-LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_hhkb \ No newline at end of file
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_hhkb
diff --git a/keyboards/sentraq/s60_x/keymaps/ansi_qwertz/keymap.c b/keyboards/sentraq/s60_x/keymaps/ansi_qwertz/keymap.c
index 08780a28c..7304c80c1 100644
--- a/keyboards/sentraq/s60_x/keymaps/ansi_qwertz/keymap.c
+++ b/keyboards/sentraq/s60_x/keymaps/ansi_qwertz/keymap.c
@@ -158,11 +158,6 @@ const uint16_t PROGMEM fn_actions[] = {
[F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT) // Oneshot Leftshift
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- return MACRO_NONE;
-};
-
void matrix_init_user(void) {
}
diff --git a/keyboards/sentraq/s60_x/rgb/rules.mk b/keyboards/sentraq/s60_x/rgb/rules.mk
index 409d60abf..39bbc5d28 100644
--- a/keyboards/sentraq/s60_x/rgb/rules.mk
+++ b/keyboards/sentraq/s60_x/rgb/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -70,4 +67,4 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable RGB light
-LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_hhkb \ No newline at end of file
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_hhkb
diff --git a/keyboards/sentraq/s65_x/rules.mk b/keyboards/sentraq/s65_x/rules.mk
index 598e269cb..6ab268dee 100644
--- a/keyboards/sentraq/s65_x/rules.mk
+++ b/keyboards/sentraq/s65_x/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/shiro/config.h b/keyboards/shiro/config.h
new file mode 100644
index 000000000..d97be0cd2
--- /dev/null
+++ b/keyboards/shiro/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 T.Shinohara
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER T.Shinohara
+#define PRODUCT Shiro
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { D4, C6, D7, E6, B4 }
+#define MATRIX_COL_PINS { F4, F5, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define 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 */
+/* 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/shiro/info.json b/keyboards/shiro/info.json
new file mode 100644
index 000000000..71d4bb551
--- /dev/null
+++ b/keyboards/shiro/info.json
@@ -0,0 +1,114 @@
+{
+ "keyboard_name": "Shiro",
+ "url": "https://github.com/ShinoharaTa/keyboards/blob/master/Shiro/manual/build_guide_ja.md",
+ "maintainer": "T.Shinohara",
+ "width": 3,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 15,
+ "layout": [
+ {
+ "x": 0,
+ "y": 0
+ },
+ {
+ "x": 1,
+ "y": 0
+ },
+ {
+ "x": 2,
+ "y": 0
+ },
+ {
+ "x": 3,
+ "y": 0
+ },
+ {
+ "x": 4,
+ "y": 0
+ },
+ {
+ "x": 0,
+ "y": 1
+ },
+ {
+ "x": 1,
+ "y": 1
+ },
+ {
+ "x": 2,
+ "y": 1
+ },
+ {
+ "x": 3,
+ "y": 1
+ },
+ {
+ "x": 4,
+ "y": 1
+ },
+ {
+ "x": 0,
+ "y": 2
+ },
+ {
+ "x": 1,
+ "y": 2
+ },
+ {
+ "x": 2,
+ "y": 2
+ },
+ {
+ "x": 3,
+ "y": 2
+ },
+ {
+ "x": 4,
+ "y": 2
+ },
+ {
+ "x": 0,
+ "y": 3
+ },
+ {
+ "x": 1,
+ "y": 3
+ },
+ {
+ "x": 2,
+ "y": 3
+ },
+ {
+ "x": 3,
+ "y": 3
+ },
+ {
+ "x": 4,
+ "y": 3
+ },
+ {
+ "x": 0,
+ "y": 4
+ },
+ {
+ "x": 1,
+ "y": 4
+ },
+ {
+ "x": 2,
+ "y": 4
+ },
+ {
+ "x": 3,
+ "y": 4
+ },
+ {
+ "x": 4,
+ "y": 4
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/shiro/keymaps/check/config.h b/keyboards/shiro/keymaps/check/config.h
new file mode 100644
index 000000000..369388ada
--- /dev/null
+++ b/keyboards/shiro/keymaps/check/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/shiro/keymaps/check/keymap.c b/keyboards/shiro/keymaps/check/keymap.c
new file mode 100644
index 000000000..1f41f61dd
--- /dev/null
+++ b/keyboards/shiro/keymaps/check/keymap.c
@@ -0,0 +1,66 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ TEST_A1 = SAFE_RANGE,
+ TEST_A2,
+ TEST_A3,
+ TEST_B1,
+ TEST_B2,
+ TEST_B3,
+ TEST_C1,
+ TEST_C2,
+ TEST_C3,
+ TEST_D1,
+ TEST_D2,
+ TEST_D3,
+ TEST_E1,
+ TEST_E2,
+ TEST_E3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( /* Base */
+ TEST_A1, TEST_A2, TEST_A3,
+ TEST_B1, TEST_B2, TEST_B3,
+ TEST_C1, TEST_C2, TEST_C3,
+ TEST_D1, TEST_D2, TEST_D3,
+ TEST_E1, TEST_E2, TEST_E3
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TEST_A1: if(record->event.pressed){ SEND_STRING("A1"); } break;
+ case TEST_A2: if(record->event.pressed){ SEND_STRING("A2"); } break;
+ case TEST_A3: if(record->event.pressed){ SEND_STRING("A3"); } break;
+ case TEST_B1: if(record->event.pressed){ SEND_STRING("B1"); } break;
+ case TEST_B2: if(record->event.pressed){ SEND_STRING("B2"); } break;
+ case TEST_B3: if(record->event.pressed){ SEND_STRING("B3"); } break;
+ case TEST_C1: if(record->event.pressed){ SEND_STRING("C1"); } break;
+ case TEST_C2: if(record->event.pressed){ SEND_STRING("C2"); } break;
+ case TEST_C3: if(record->event.pressed){ SEND_STRING("C3"); } break;
+ case TEST_D1: if(record->event.pressed){ SEND_STRING("D1"); } break;
+ case TEST_D2: if(record->event.pressed){ SEND_STRING("D2"); } break;
+ case TEST_D3: if(record->event.pressed){ SEND_STRING("D3"); } break;
+ case TEST_E1: if(record->event.pressed){ SEND_STRING("E1"); } break;
+ case TEST_E2: if(record->event.pressed){ SEND_STRING("E2"); } break;
+ case TEST_E3: if(record->event.pressed){ SEND_STRING("E3"); } break;
+ }
+ return true;
+}
diff --git a/keyboards/shiro/keymaps/check/readme.md b/keyboards/shiro/keymaps/check/readme.md
new file mode 100644
index 000000000..715ddd335
--- /dev/null
+++ b/keyboards/shiro/keymaps/check/readme.md
@@ -0,0 +1 @@
+# The default keymap for Shiro \ No newline at end of file
diff --git a/keyboards/shiro/keymaps/default/config.h b/keyboards/shiro/keymaps/default/config.h
new file mode 100644
index 000000000..369388ada
--- /dev/null
+++ b/keyboards/shiro/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/shiro/keymaps/default/keymap.c b/keyboards/shiro/keymaps/default/keymap.c
new file mode 100644
index 000000000..b80c29452
--- /dev/null
+++ b/keyboards/shiro/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ _NUMBER = 0,
+ _CURSOL,
+ _MOUSE
+};
+
+#define NUMBER TO(_NUMBER)
+#define CURSOL TO(_CURSOL)
+#define MOUSE TO(_MOUSE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NUMBER] = LAYOUT(
+ NUMBER, CURSOL, MOUSE,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_BSPC, KC_ENT
+ ),
+ [_CURSOL] = LAYOUT(
+ NUMBER, CURSOL, MOUSE,
+ KC_HOME, KC_UP, KC_PGUP,
+ KC_LEFT, KC_ESC, KC_RIGHT,
+ KC_END, KC_DOWN, KC_PGDN,
+ KC_DEL, KC_BSPC, KC_ENT
+ ),
+ [_MOUSE] = LAYOUT(
+ NUMBER, CURSOL, MOUSE,
+ KC_CUT, KC_COPY, KC_PSTE,
+ KC_UNDO, KC_FIND, KC_AGIN,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_DEL, KC_BSPC, KC_ENT
+ ),
+};
diff --git a/keyboards/shiro/keymaps/default/readme.md b/keyboards/shiro/keymaps/default/readme.md
new file mode 100644
index 000000000..715ddd335
--- /dev/null
+++ b/keyboards/shiro/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for Shiro \ No newline at end of file
diff --git a/keyboards/shiro/readme.md b/keyboards/shiro/readme.md
new file mode 100644
index 000000000..7c4c024a6
--- /dev/null
+++ b/keyboards/shiro/readme.md
@@ -0,0 +1,27 @@
+# 素 - Shiro
+
+![Shiro](https://cdn.discordapp.com/attachments/536423734144401422/597447002288291861/P7070070_cp.jpg)
+
+これは日本の名刺(55mmx91mm)に、3x5の15キーを詰め込んだとても小さいキーパッドです。
+
+This product is a 3x5 very small keypad.
+It is made in 55mm x 91mm according to the Japanese business card.
+
+Keyboard Maintainer: [T.Shinohara](https://github.com/ShinoharaTa)
+Hardware Supported: The Shiro PCBs, ProMicro supported. Using only Kailh Low Profile Switches.
+Hardware Availability: [Booth (Japanese Site)](https://shino3.booth.pm/items/1444895)
+日本国内ではBoothで入手できます: [Booth (Japanese Site)](https://shino3.booth.pm/items/1444895)
+
+![Shiro-backside](https://cdn.discordapp.com/attachments/536423734144401422/597464086640328724/20190707_033520.jpg)
+
+Make for this keyboard default keymap (after setting up your build environment):
+
+ make shiro:default
+
+Make for this keyboard build check keymap (after setting up your build environment):
+
+ make shiro:check
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+[Build guide - Japanese](https://github.com/ShinoharaTa/keyboards/blob/master/Shiro/manual/build_guide_ja.md) \ No newline at end of file
diff --git a/keyboards/shiro/rules.mk b/keyboards/shiro/rules.mk
new file mode 100644
index 000000000..3ea1516fc
--- /dev/null
+++ b/keyboards/shiro/rules.mk
@@ -0,0 +1,80 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = 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 = 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/shiro/shiro.c b/keyboards/shiro/shiro.c
new file mode 100644
index 000000000..b30329d33
--- /dev/null
+++ b/keyboards/shiro/shiro.c
@@ -0,0 +1,51 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "shiro.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/shiro/shiro.h b/keyboards/shiro/shiro.h
new file mode 100644
index 000000000..9e088ba55
--- /dev/null
+++ b/keyboards/shiro/shiro.h
@@ -0,0 +1,41 @@
+/* Copyright 2019 T.Shinohara
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ k00, k01, k02, \
+ k10, k11, k12, \
+ k20, k21, k22, \
+ k30, k31, k32, \
+ k40, k41, k42 \
+) \
+{ \
+ { k00, k01, k02 }, \
+ { k10, k11, k12 }, \
+ { k20, k21, k22 }, \
+ { k30, k31, k32 }, \
+ { k40, k41, k42 } \
+}
diff --git a/keyboards/singa/readme.md b/keyboards/singa/readme.md
index 4400717c8..faeb816ec 100644
--- a/keyboards/singa/readme.md
+++ b/keyboards/singa/readme.md
@@ -20,6 +20,8 @@ Flashing
ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+**Reset Key:** Hold down the key located at `K00`, commonly programmed as `Esc` while plugging in the keyboard.
+
Windows:
1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
2. Place your keyboard into reset.
@@ -41,9 +43,10 @@ macOS:
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 [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sixkeyboard/keymaps/default/keymap.c b/keyboards/sixkeyboard/keymaps/default/keymap.c
index 393974b5d..3b39892a9 100644
--- a/keyboards/sixkeyboard/keymaps/default/keymap.c
+++ b/keyboards/sixkeyboard/keymaps/default/keymap.c
@@ -9,11 +9,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- return MACRO_NONE;
-};
-
void matrix_scan_user(void) {
// jump to bootloaer when all keys are pressed
if (matrix_get_row(0) == 0b111 && matrix_get_row(1) == 0b111) {
diff --git a/keyboards/sixkeyboard/rules.mk b/keyboards/sixkeyboard/rules.mk
index 6aedc7148..52213f341 100644
--- a/keyboards/sixkeyboard/rules.mk
+++ b/keyboards/sixkeyboard/rules.mk
@@ -1,9 +1,6 @@
-
-
SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega16u2
# Processor frequency.
@@ -67,4 +64,4 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-CUSTOM_MATRIX = yes \ No newline at end of file
+CUSTOM_MATRIX = yes
diff --git a/keyboards/speedo/keymaps/default/keymap.c b/keyboards/speedo/keymaps/default/keymap.c
index ccfc60856..f5365b122 100644
--- a/keyboards/speedo/keymaps/default/keymap.c
+++ b/keyboards/speedo/keymaps/default/keymap.c
@@ -55,22 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/speedo/rules.mk b/keyboards/speedo/rules.mk
index 45eb6ee37..6cba6b6b8 100644
--- a/keyboards/speedo/rules.mk
+++ b/keyboards/speedo/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk
index 2af733b6b..ceb6f96af 100755
--- a/keyboards/tada68/rules.mk
+++ b/keyboards/tada68/rules.mk
@@ -1,6 +1,4 @@
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/tanuki/config.h b/keyboards/tanuki/config.h
index 6d728b595..1439ed43e 100644
--- a/keyboards/tanuki/config.h
+++ b/keyboards/tanuki/config.h
@@ -48,11 +48,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LOCKING_RESYNC_ENABLE
#define RGB_DI_PIN D1
+#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 5
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
+#define RGBLIGHT_SLEEP
+#endif
#define TAPPING_TERM 200
/*
diff --git a/keyboards/tanuki/keymaps/default/keymap.c b/keyboards/tanuki/keymaps/default/keymap.c
index 29c9071bf..34ca6a639 100644
--- a/keyboards/tanuki/keymaps/default/keymap.c
+++ b/keyboards/tanuki/keymaps/default/keymap.c
@@ -16,34 +16,34 @@ bool lRGB = true;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, TG(_GL), \
+ 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, TG(_GL), \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_SLSH, KC_ENT, \
- KC_TAB, KC_ESC, KC_LCTL, KC_LALT, KC_COMMA, LT(_DL,KC_SPC), LT(_UL,KC_SPC), KC_DOT, KC_LGUI),
+ KC_LCTL, KC_LALT, KC_COMMA, LT(_DL,KC_SPC), LT(_UL,KC_SPC), KC_DOT, KC_LGUI),
[_DL] = LAYOUT(
- KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,\
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,\
KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_F1, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_UL] = LAYOUT(
- KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_PIPE, KC_BSLS, KC_PLUS, KC_UNDS, KC_MINS, KC_EQL, KC_DEL,\
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, \
+ KC_GRV, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_PIPE, KC_BSLS, KC_PLUS, KC_UNDS, KC_MINS, KC_EQL, KC_DEL,\
+ KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, \
KC_TRNS, KC_FN0, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_GRV, KC_TRNS, RGB_MOD, RGB_HUI, KC_TRNS, KC_TRNS, RGB_SAI, RGB_VAI),
+ KC_TRNS, RGB_MOD, RGB_HUI, KC_TRNS, KC_TRNS, RGB_SAI, RGB_VAI),
[_GL] = LAYOUT(
- 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_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS),
[_BK] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_FN1, KC_NO, KC_NO),
+ KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_FN1, KC_NO, KC_NO),
};
diff --git a/keyboards/tanuki/tanuki.h b/keyboards/tanuki/tanuki.h
index 6b686adaf..9615e44f3 100644
--- a/keyboards/tanuki/tanuki.h
+++ b/keyboards/tanuki/tanuki.h
@@ -7,10 +7,10 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, \
+ k31, k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, \
+ k30, 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, k38, k39 \
+ k32, k33, k34, k35, k36, k38, k39 \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a}, \
diff --git a/keyboards/telophase/rules.mk b/keyboards/telophase/rules.mk
index cfaf58e3d..3af91858f 100644
--- a/keyboards/telophase/rules.mk
+++ b/keyboards/telophase/rules.mk
@@ -8,7 +8,6 @@ SRC = matrix.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/tetris/config.h b/keyboards/tetris/config.h
index 7fe0c2d64..024d3be0e 100755
--- a/keyboards/tetris/config.h
+++ b/keyboards/tetris/config.h
@@ -40,7 +40,6 @@
#define NO_MUSIC_MODE
#endif
-#define NUMBER_OF_ENCODERS 2
#define ENCODERS_PAD_A { D1,F1 }
#define ENCODERS_PAD_B { D0,F0 }
diff --git a/keyboards/the_ruler/rules.mk b/keyboards/the_ruler/rules.mk
index 6362176fe..7eca12ad4 100644
--- a/keyboards/the_ruler/rules.mk
+++ b/keyboards/the_ruler/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c
index ee8653520..f8b42cb79 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c
@@ -164,8 +164,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MN] = LAYOUT_arrow(
ALTESC, CAG1, CAG2, CAG3, CAG4, CAG5, CAG6, CAG7, CAG8, CAG9, CAG0, SWTCH,
ALTX, ALT1, ALT2, ALT3, ALT4, ALT5, ALT6, ALT7, ALT8, ALT9, ALT0, _______,
- ALTEQL, MEH1, MEH2, MEH3, MEH4, MEH5, MEH6, MEH7, MEH8, MEH9, MEH0, xxxxxxx,
- ALTMIN, xxxxxxx, XBACK, ALTL, ALTR, XFFWD, xxxxxxx, xxxxxxx, xxxxxxx
+ ALTEQL, MEH1, MEH2, MEH3, MEH4, MEH5, MEH6, MEH7, MEH8, MEH9, MEH0, XXXXXXX,
+ ALTMIN, XXXXXXX, XBACK, ALTL, ALTR, XFFWD, XXXXXXX, XXXXXXX, XXXXXXX
),
@@ -183,9 +183,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FN] = LAYOUT_arrow(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, xxxxxxx,
- _______, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, xxxxxxx, KC_PWR, KC_SLEP, KC_WAKE, xxxxxxx, xxxxxxx, xxxxxxx,
- _______, KC_CAPS, _______, xxxxxxx, SWTCH, KC_RALT, xxxxxxx, RESET, _______
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PWR, KC_SLEP, KC_WAKE, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_CAPS, _______, XXXXXXX, SWTCH, KC_RALT, XXXXXXX, RESET, _______
)
diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
index bc6c213f0..ac19f8ccd 100644
--- a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
@@ -14,16 +14,17 @@ extern keymap_config_t keymap_config;
#define _L2 4
#define _L3 5
-// Macro name shortcuts
-#define QWERTY M(_QW)
-#define DVORAK M(_DV)
-#define COLEMAK M(_CM)
-
// Curly braces have their own keys. These are defined to make them not mess up
// the grid in layer 2.
#define L_CURBR LSFT(KC_LBRC)
#define R_CURBR LSFT(KC_RBRC)
+enum custom_keycodes {
+ DVORAK = SAFE_RANGE,
+ QWERTY,
+ COLEMAK
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = LAYOUT( /* Qwerty */
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
@@ -68,24 +69,25 @@ 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 _DV:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case DVORAK:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_DV);
}
- break;
- case _QW:
+ return false;
+ case QWERTY:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_QW);
}
- break;
- case _CM:
+ return false;
+ case COLEMAK:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_CM);
}
- break;
+ return false;
+ default:
+ return true;
}
- return MACRO_NONE;
+ return true;
};
diff --git a/keyboards/thevankeyboards/minivan/minivan.h b/keyboards/thevankeyboards/minivan/minivan.h
index 27a358365..eb9aa6793 100644
--- a/keyboards/thevankeyboards/minivan/minivan.h
+++ b/keyboards/thevankeyboards/minivan/minivan.h
@@ -42,7 +42,7 @@
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
- K30, K31, K34, K32, K33, K37, K38, K39, K3B \
+ K30, K31, K32, K34, K33, K37, K38, K39, K3B \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
@@ -55,7 +55,7 @@
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
- K30, K31, K34, K32, K33, K37, K38, K39, K3A, K3B \
+ K30, K31, K32, K34, K33, K37, K38, K39, K3A, K3B \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
diff --git a/keyboards/thevankeyboards/minivan/readme.md b/keyboards/thevankeyboards/minivan/readme.md
index 03a868a16..2464fe7a4 100644
--- a/keyboards/thevankeyboards/minivan/readme.md
+++ b/keyboards/thevankeyboards/minivan/readme.md
@@ -4,7 +4,7 @@ A compact 44% keyboard.
Keyboard Maintainer: QMK Community
Hardware Supported: Minivan PCB
-Hardware Availability: https://thevankeyboards.com/collections/catalog/products/minivan-diy?variant=609138376718
+Hardware Availability: https://thevankeyboards.com/collections/catalog
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/thevankeyboards/minivan/rules.mk b/keyboards/thevankeyboards/minivan/rules.mk
index 786c9dc3e..ea453e4b8 100644
--- a/keyboards/thevankeyboards/minivan/rules.mk
+++ b/keyboards/thevankeyboards/minivan/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
index 7aa7bcafb..af1a94cc2 100644
--- a/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
@@ -9,8 +9,9 @@ extern keymap_config_t keymap_config;
#define _NP 0
-// Macro name shortcuts
-#define NUMPAD M(_NP)
+enum custom_keycodes {
+ NUMPAD = SAFE_RANGE
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_NP] = LAYOUT_numpad_4x4( /* Numpad */
@@ -26,14 +27,15 @@ 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 _NP:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case NUMPAD:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_NP);
}
- break;
+ return false;
+ default:
+ return true;
}
- return MACRO_NONE;
+ return true;
};
diff --git a/keyboards/thevankeyboards/roadkit/rules.mk b/keyboards/thevankeyboards/roadkit/rules.mk
index d15a5541b..c2afaa85a 100644
--- a/keyboards/thevankeyboards/roadkit/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/tmo50/rules.mk b/keyboards/tmo50/rules.mk
index b773031d5..f18bf73e8 100644
--- a/keyboards/tmo50/rules.mk
+++ b/keyboards/tmo50/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/tokyo60/rules.mk b/keyboards/tokyo60/rules.mk
index 45f0013c1..3ec2e6150 100644
--- a/keyboards/tokyo60/rules.mk
+++ b/keyboards/tokyo60/rules.mk
@@ -1,7 +1,4 @@
-
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/treadstone48/rules.mk b/keyboards/treadstone48/rules.mk
index 6ddbdaf80..8b0d3cd30 100644
--- a/keyboards/treadstone48/rules.mk
+++ b/keyboards/treadstone48/rules.mk
@@ -3,7 +3,6 @@ SRC += serial.c
SRC += ssd1306.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/treasure/type9/rules.mk b/keyboards/treasure/type9/rules.mk
index 599974d25..af90959e1 100644
--- a/keyboards/treasure/type9/rules.mk
+++ b/keyboards/treasure/type9/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/unikorn/config.h b/keyboards/unikorn/config.h
new file mode 100644
index 000000000..161956b88
--- /dev/null
+++ b/keyboards/unikorn/config.h
@@ -0,0 +1,43 @@
+/*
+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 Singa and TGR
+#define PRODUCT Unikorn 60
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// 0 1 2 3 4 5 6 7 8 9 A B C D E
+#define MATRIX_ROW_PINS { B1, B2, B3, B4, B5 }
+#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 DEBOUNCE 5
+
+#define NO_BACKLIGHT_CLOCK
+#define BACKLIGHT_LEVELS 1
+#ifdef RGBLIGHT_ENABLE
+#define RGBLED_NUM 17
+#define RGBLIGHT_ANIMATIONS
+#endif
diff --git a/keyboards/unikorn/info.json b/keyboards/unikorn/info.json
new file mode 100644
index 000000000..9c82e25b4
--- /dev/null
+++ b/keyboards/unikorn/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "Unikorn 60",
+ "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}, {"x":13.75, "y":2, "w":1.25}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"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":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"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_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}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/unikorn/keymaps/default/config.h b/keyboards/unikorn/keymaps/default/config.h
new file mode 100644
index 000000000..93b81b57b
--- /dev/null
+++ b/keyboards/unikorn/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/unikorn/keymaps/default/keymap.c b/keyboards/unikorn/keymaps/default/keymap.c
new file mode 100644
index 000000000..d19d83c8a
--- /dev/null
+++ b/keyboards/unikorn/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2019 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_ansi(
+ KC_GRV, KC_Q, KC_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(1), KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_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,
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/unikorn/keymaps/default/readme.md b/keyboards/unikorn/keymaps/default/readme.md
new file mode 100644
index 000000000..1f19a96b4
--- /dev/null
+++ b/keyboards/unikorn/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for singa \ No newline at end of file
diff --git a/keyboards/unikorn/keymaps/default/rules.mk b/keyboards/unikorn/keymaps/default/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/unikorn/keymaps/default/rules.mk
diff --git a/keyboards/unikorn/readme.md b/keyboards/unikorn/readme.md
new file mode 100644
index 000000000..953d5be79
--- /dev/null
+++ b/keyboards/unikorn/readme.md
@@ -0,0 +1,57 @@
+# Unikorn 60
+
+60% PCB made for the TGR x SINGA Unikorn60.
+
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: Unikorn 60 PCB
+Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=98350.0)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make unikorn:default
+
+This PCB can support RGB underglow. There are pads on the bottom of the PCB for the LED controller chip and for 17 RGB underglow LEDs. The Unikorn 60 case does not have acrylic pieces to properly display underglow effects.
+
+To enable RGB lighting support, install the necessary components and set RGBLIGHT features in `rules.mk` like so:
+
+```
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+```
+
+
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+**Reset Key:** Short the two holes labeled `FW_JP` beside the Tab key. At this time there is no reset key to press.
+
+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/unikorn/rules.mk b/keyboards/unikorn/rules.mk
new file mode 100644
index 000000000..7d6fa14e1
--- /dev/null
+++ b/keyboards/unikorn/rules.mk
@@ -0,0 +1,48 @@
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# processor frequency
+F_CPU = 12000000
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = no
+RGBLIGHT_CUSTOM_DRIVER = no
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+SRC = i2c_master.c
+
+# programming options
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/unikorn/unikorn.c b/keyboards/unikorn/unikorn.c
new file mode 100644
index 000000000..1bd47ef9e
--- /dev/null
+++ b/keyboards/unikorn/unikorn.c
@@ -0,0 +1,89 @@
+/* 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 "i2c_master.h"
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+#include "rgblight.h"
+extern rgblight_config_t rgblight_config;
+
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+
+ i2c_init();
+ i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
+}
+#endif
+
+void matrix_init_kb(void) {
+#ifdef RGBLIGHT_ENABLE
+ if (rgblight_config.enable) {
+ i2c_init();
+ i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
+ }
+#endif
+ // call user level keymaps, if any
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_task();
+#endif
+ matrix_scan_user();
+ /* Nothing else for now. */
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+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);
+ }
+}
diff --git a/keyboards/unikorn/unikorn.h b/keyboards/unikorn/unikorn.h
new file mode 100644
index 000000000..6824492e0
--- /dev/null
+++ b/keyboards/unikorn/unikorn.h
@@ -0,0 +1,52 @@
+/* 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
+// The second converts the arguments into a two-dimensional array
+
+#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, \
+ k40, k41, k42, k44, k45, k47, k48, k49, k4B, 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 }, \
+ { k40, k41, k42, KC_NO, k44, k45, KC_NO, k47, k48, k49, KC_NO, k4B, KC_NO, k4D, KC_NO }, \
+}
+
+
+#define LAYOUT_60_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, \
+ k40, k41, k42, k45, k48, k49, k4B, 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 }, \
+ { k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, k48, k49, KC_NO, k4B, KC_NO, k4D, KC_NO }, \
+}
+
diff --git a/keyboards/unikorn/usbconfig.h b/keyboards/unikorn/usbconfig.h
new file mode 100644
index 000000000..41ce167a8
--- /dev/null
+++ b/keyboards/unikorn/usbconfig.h
@@ -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 's', 'i', 'n', 'g', 'a', 't', 'g', 'r'
+#define USB_CFG_VENDOR_NAME_LEN 8
+/* 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 'u', 'n', 'i', 'k', 'o', 'r', 'n'
+#define USB_CFG_DEVICE_NAME_LEN 7
+/* 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/v60_type_r/keymaps/default/keymap.c b/keyboards/v60_type_r/keymaps/default/keymap.c
index 831def078..352400815 100644
--- a/keyboards/v60_type_r/keymaps/default/keymap.c
+++ b/keyboards/v60_type_r/keymaps/default/keymap.c
@@ -63,22 +63,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
void led_set_user(uint8_t usb_led) {
}
diff --git a/keyboards/v60_type_r/rules.mk b/keyboards/v60_type_r/rules.mk
index 54a20a781..f7f7c9b9e 100644
--- a/keyboards/v60_type_r/rules.mk
+++ b/keyboards/v60_type_r/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c
index 18fb7c16d..1548ba995 100644
--- a/keyboards/vision_division/keymaps/default/keymap.c
+++ b/keyboards/vision_division/keymaps/default/keymap.c
@@ -9,112 +9,20 @@ enum keyboard_layers {
LAYER_MOUSE,
LAYER_ADJUST,
};
-enum keyboard_macros {
- MACRO_QWERTY = 0,
- MACRO_UPPER,
- MACRO_LOWER,
- MACRO_FUNCTION,
- MACRO_MOUSE,
- MACRO_TIMBRE_1,
- MACRO_TIMBRE_2,
- MACRO_TIMBRE_3,
- MACRO_TIMBRE_4,
- MACRO_TEMPO_U,
- MACRO_TEMPO_D,
- MACRO_TONE_DEFAULT,
- MACRO_MUSIC_TOGGLE,
- MACRO_AUDIO_TOGGLE,
- MACRO_INC_VOICE,
- MACRO_DEC_VOICE,
- MACRO_BACKLIGHT,
- MACRO_BREATH_TOGGLE,
- MACRO_BREATH_SPEED_INC,
- MACRO_BREATH_SPEED_DEC,
- MACRO_BREATH_DEFAULT,
- MACRO_MOUSE_MOVE_UL,
- MACRO_MOUSE_MOVE_UR,
- MACRO_MOUSE_MOVE_DL,
- MACRO_MOUSE_MOVE_DR,
- MACRO_HELP,
- MACRO_HELP_1,
- MACRO_HELP_2,
- MACRO_HELP_3,
- MACRO_HELP_4,
- MACRO_HELP_5,
- MACRO_HELP_6,
- MACRO_HELP_7,
- MACRO_HELP_8,
- MACRO_HELP_9,
- MACRO_HELP_0,
- MACRO_GENERAL_1,
- MACRO_GENERAL_2,
- MACRO_GENERAL_3,
- MACRO_GENERAL_4,
- MACRO_GENERAL_5,
- MACRO_CURSOR_UL,
- MACRO_CURSOR_UR,
- MACRO_CURSOR_DL,
- MACRO_CURSOR_DR,
- MACRO_MUTE_APP,
- MACRO_COPY_CUT,
-};
-#define M_QWRTY M(MACRO_QWERTY)
-#define M_UPPER M(MACRO_UPPER)
-#define M_LOWER M(MACRO_LOWER)
-#define M_FUNCT M(MACRO_FUNCTION)
-#define M_MOUSE M(MACRO_MOUSE)
-
-#define TIMBR_1 M(MACRO_TIMBRE_1)
-#define TIMBR_2 M(MACRO_TIMBRE_2)
-#define TIMBR_3 M(MACRO_TIMBRE_3)
-#define TIMBR_4 M(MACRO_TIMBRE_4)
-#define TMPO_UP M(MACRO_TEMPO_U)
-#define TMPO_DN M(MACRO_TEMPO_D)
-#define TMPO_DF M(MACRO_TONE_DEFAULT)
-
-#define VC_UP M(MACRO_INC_VOICE)
-#define VC_DOWN M(MACRO_DEC_VOICE)
-
-#define M_BACKL M(MACRO_BACKLIGHT)
-#define M_BRTOG M(MACRO_BREATH_TOGGLE)
-#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
-#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
-#define M_BDFLT M(MACRO_BREATH_DEFAULT)
-
-#define M_MS_UL M(MACRO_MOUSE_MOVE_UL)
-#define M_MS_UR M(MACRO_MOUSE_MOVE_UR)
-#define M_MS_DL M(MACRO_MOUSE_MOVE_DL)
-#define M_MS_DR M(MACRO_MOUSE_MOVE_DR)
-
-#define M_HELP M(MACRO_HELP)
-#define M_HELP1 M(MACRO_HELP_1)
-#define M_HELP2 M(MACRO_HELP_2)
-#define M_HELP3 M(MACRO_HELP_3)
-#define M_HELP4 M(MACRO_HELP_4)
-#define M_HELP5 M(MACRO_HELP_5)
-#define M_HELP6 M(MACRO_HELP_6)
-#define M_HELP7 M(MACRO_HELP_7)
-#define M_HELP8 M(MACRO_HELP_8)
-#define M_HELP9 M(MACRO_HELP_9)
-#define M_HELP0 M(MACRO_HELP_0)
-
-#define M_M1 M(MACRO_GENERAL_1)
-#define M_M2 M(MACRO_GENERAL_2)
-#define M_M3 M(MACRO_GENERAL_3)
-#define M_M4 M(MACRO_GENERAL_4)
-#define M_M5 M(MACRO_GENERAL_5)
-
-#define M_UL M(MACRO_CURSOR_UL)
-#define M_UR M(MACRO_CURSOR_UR)
-#define M_DL M(MACRO_CURSOR_DL)
-#define M_DR M(MACRO_CURSOR_DR)
-
-#define M_MUTEA M(MACRO_MUTE_APP)
-
-#define M_CP_CT M(MACRO_COPY_CUT)
-
-#define M_COPY MACROTAP(MACRO_COPY_CUT)
+enum custom_keycodes {
+ M_CP_CT = SAFE_RANGE,
+ M_UPPER,
+ M_LOWER,
+ M_MOUSE,
+ TIMBR_1,
+ TIMBR_2,
+ TIMBR_3,
+ TIMBR_4,
+ TMPO_UP,
+ TMPO_DN,
+ TMPO_DF
+};
#define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y)
@@ -151,28 +59,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
| VOL DN | MUTE | VOL UP | BACKLT | | F1 | F2 | F3 | F4 | XXXXXX | F5 | F6 | F7 | F8 | XXXXXX | F9 | F10 | F11 | F12 | | PRINT | SCR LK | PAUSE | FN |
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
- | NUM LK | KP / | KP * | KP - | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | INS | HOME | PG UP | M1 |
+ | NUM LK | KP / | KP * | KP - | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | INS | HOME | PG UP | XXXXXX |
|--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
- | KP 7 | KP 8 | KP 9 | KP + | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | DEL | END | PG DN | M2 |
+ | KP 7 | KP 8 | KP 9 | KP + | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | DEL | END | PG DN | XXXXXX |
|--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
- | KP 4 | KP 5 | KP 6 | KP + | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | CP/CT | UNDO | PASTE | M3 |
+ | KP 4 | KP 5 | KP 6 | KP + | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | CP/CT | UNDO | PASTE | XXXXXX |
|--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
- | KP 1 | KP 2 | KP 3 | KP Ent | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | XXXXXX | UP | XXXXXX | M4 |
+ | KP 1 | KP 2 | KP 3 | KP Ent | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | XXXXXX | UP | XXXXXX | XXXXXX |
|--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
- | KP 0 | KP , | KP . | KP Ent | | LCTRL | XXXXXX | LWIN | XXXXXX | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | LEFT | DOWN | RIGHT | M5 |
+ | KP 0 | KP , | KP . | KP Ent | | LCTRL | XXXXXX | LWIN | XXXXXX | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | LEFT | DOWN | RIGHT | XXXXXX |
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
*/
KEYMAP(LAYER_QWERTY, \
- KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SLCK, KC_PAUS, M_HELP , \
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP, M_M1 , \
- KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_DEL , KC_END , KC_PGDN, M_M2 , \
- KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , M_CP_CT, SC_UNDO, SC_PSTE, M_M3 , \
- KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, XXXXXXX, KC_UP , XXXXXXX, M_M4 , \
- KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT, KC_LCTL, XXXXXXX, KC_LGUI, XXXXXXX, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, M_M5 \
+ KC_VOLD, KC_MUTE, KC_VOLU, BL_STEP, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX , \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP, XXXXXXX , \
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_DEL , KC_END , KC_PGDN, XXXXXXX , \
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , M_CP_CT, SC_UNDO, SC_PSTE, XXXXXXX , \
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, XXXXXXX, KC_UP , XXXXXXX, XXXXXXX , \
+ KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT, KC_LCTL, XXXXXXX, KC_LGUI, XXXXXXX, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX \
),
/* LAYER = LAYER_LOWER
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
- | ______ | MUTE A | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ |
+ | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ |
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
| ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ |
@@ -187,7 +95,7 @@ KEYMAP(LAYER_QWERTY, \
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
*/
KEYMAP(LAYER_LOWER, \
- _______, M_MUTEA, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \
+ _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, _______, _______, _______, \
@@ -196,7 +104,7 @@ KEYMAP(LAYER_LOWER, \
),
/* LAYER = LAYER_UPPER
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
- | ______ | MUTE A | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ |
+ | ______ | ______ | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ |
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
| ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ |
@@ -211,7 +119,7 @@ KEYMAP(LAYER_LOWER, \
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
*/
KEYMAP(LAYER_UPPER, \
- _______, M_MUTEA, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \
+ _______, _______, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, _______, _______, _______, \
@@ -244,7 +152,7 @@ KEYMAP(LAYER_MOUSE, \
),
/* LAYER = LAYER_ADJUST
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
- | VOICE- | AUDIO | VOICE+ | MUSIC | | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ | VOICE- | AUDIO | VOICE+ | MUSIC | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
.-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
| XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
@@ -259,7 +167,7 @@ KEYMAP(LAYER_MOUSE, \
'-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
*/
KEYMAP(LAYER_ADJUST, \
- MUV_DE , AU_TOG , MUV_IN , MU_TOG , M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ MUV_DE , AU_TOG , MUV_IN , MU_TOG , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 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, \
@@ -296,233 +204,85 @@ 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)
-{
-
- // MACRODOWN only works in this function
- switch(id)
- {
-
- case MACRO_COPY_CUT:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case M_CP_CT:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
- }
- else if (record->tap.count == 2) {
+ } else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
- break;
-
-
- // case MACRO_HELP_1:
- // if (record->event.pressed)
- // {
- // uprint("H1");
- // }
- // break;
-
- // case MACRO_HELP_2:
- // if (record->event.pressed)
- // {
- // uprint("H2");
- // }
- // break;
-
- // case MACRO_HELP_3:
- // if (record->event.pressed)
- // {
- // uprint("H3");
- // }
- // break;
-
- // case MACRO_HELP_4:
- // if (record->event.pressed)
- // {
- // uprint("H4");
- // }
- // break;
-
- // case MACRO_HELP_5:
- // if (record->event.pressed)
- // {
- // uprint("H5");
- // }
- // break;
-
- // case MACRO_HELP_6:
- // if (record->event.pressed)
- // {
- // uprint("H6");
- // }
- // break;
-
- // case MACRO_HELP_7:
- // if (record->event.pressed)
- // {
- // uprint("H7");
- // }
- // break;
-
- // case MACRO_HELP_8:
- // if (record->event.pressed)
- // {
- // uprint("H8");
- // }
- // break;
-
- // case MACRO_HELP_9:
- // if (record->event.pressed)
- // {
- // uprint("H9");
- // }
- // break;
-
- case MACRO_BREATH_TOGGLE:
- if (record->event.pressed)
- {
- breathing_toggle();
- }
- break;
-
- case MACRO_BREATH_SPEED_INC:
- if (record->event.pressed)
- {
- breathing_period_inc();
- }
- break;
+ return false;
- case MACRO_BREATH_SPEED_DEC:
- if (record->event.pressed)
- {
- breathing_period_dec();
- }
- break;
-
- case MACRO_BREATH_DEFAULT:
- if (record->event.pressed)
- {
- breathing_period_default();
- }
- break;
-
- case MACRO_QWERTY:
- if (record->event.pressed)
- {
- persistent_default_layer_set(1UL<<LAYER_QWERTY);
- }
- break;
-
- case MACRO_UPPER:
- if (record->event.pressed)
- {
+ case M_UPPER:
+ if (record->event.pressed) {
layer_on(LAYER_UPPER);
breathing_period_set(2);
breathing_pulse();
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
- }
- else
- {
+ } else {
layer_off(LAYER_UPPER);
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
- break;
+ return false;
- case MACRO_LOWER:
- if (record->event.pressed)
- {
+ case M_LOWER:
+ if (record->event.pressed) {
layer_on(LAYER_LOWER);
breathing_period_set(2);
breathing_pulse();
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
- }
- else
- {
+ } else {
layer_off(LAYER_LOWER);
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
- break;
-
- case MACRO_FUNCTION:
- if (record->event.pressed)
- {
- breathing_period_set(3);
- breathing_enable();
- layer_on(LAYER_FUNCTION);
- }
- else
- {
- breathing_period_set(1);
- breathing_self_disable();
- layer_off(LAYER_FUNCTION);
- }
- break;
+ return false;
#ifdef MOUSEKEY_ENABLE
-
- case MACRO_MOUSE:
- if (record->event.pressed)
- {
+ case M_MOUSE:
+ if (record->event.pressed) {
layer_invert(LAYER_MOUSE);
}
- break;
-
+ return false;
#endif /* MOUSEKEY_ENABLE */
#ifdef AUDIO_ENABLE
-
- case MACRO_TIMBRE_1:
+ case TIMBR_1:
if (record->event.pressed) set_timbre(TIMBRE_12);
- break;
-
- case MACRO_TIMBRE_2:
+ return false;
+ case TIMBR_2:
if (record->event.pressed) set_timbre(TIMBRE_25);
- break;
-
- case MACRO_TIMBRE_3:
+ return false;
+ case TIMBR_3:
if (record->event.pressed) set_timbre(TIMBRE_50);
- break;
-
- case MACRO_TIMBRE_4:
+ return false;
+ case TIMBR_4:
if (record->event.pressed) set_timbre(TIMBRE_75);
- break;
-
- case MACRO_TEMPO_U:
+ return false;
+ case TMPO_UP:
if (record->event.pressed) increase_tempo(10);
- break;
-
- case MACRO_TEMPO_D:
+ return false;
+ case TMPO_DN:
if (record->event.pressed) decrease_tempo(10);
- break;
-
- case MACRO_TONE_DEFAULT:
- if (record->event.pressed)
- {
+ return false;
+ case TMPO_DF:
+ if (record->event.pressed) {
set_timbre(TIMBRE_DEFAULT);
set_tempo(TEMPO_DEFAULT);
}
- break;
-
+ return false;
#endif /* AUDIO_ENABLE */
-#ifdef BACKLIGHT_ENABLE
- case MACRO_BACKLIGHT:
- if (record->event.pressed)
- {
- backlight_step();
- }
- break;
-#endif /* BACKLIGHT_ENABLE */
-
default:
- break;
-
-}
-return MACRO_NONE;
+ return true;
+ }
+ return true;
};
#ifdef AUDIO_ENABLE
diff --git a/keyboards/vision_division/rules.mk b/keyboards/vision_division/rules.mk
index 5b739d4fd..5cd3a69bb 100644
--- a/keyboards/vision_division/rules.mk
+++ b/keyboards/vision_division/rules.mk
@@ -1,9 +1,5 @@
-
-
# MCU name
MCU = at90usb1286
-# MCU = at90usb1287
-# MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
@@ -67,4 +63,4 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by d
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6 \ No newline at end of file
+AUDIO_ENABLE = no # Audio output on port C6
diff --git a/keyboards/wasdat/keymaps/konstantin/config.h b/keyboards/wasdat/keymaps/konstantin/config.h
new file mode 100644
index 000000000..3c2583e2d
--- /dev/null
+++ b/keyboards/wasdat/keymaps/konstantin/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define LAYER_FN
+#define LAYER_NUMPAD
diff --git a/keyboards/wasdat/keymaps/konstantin/keymap.c b/keyboards/wasdat/keymaps/konstantin/keymap.c
new file mode 100644
index 000000000..4fb24a5e3
--- /dev/null
+++ b/keyboards/wasdat/keymaps/konstantin/keymap.c
@@ -0,0 +1,79 @@
+#include QMK_KEYBOARD_H
+#include "konstantin.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12││PSc│SLk│Pau│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bspace ││Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ ││Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐Ent │└───┴───┴───┘
+ * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ \ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+ * │LSft│RAG│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ RShift │ │ ↑ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+ * │LCtl│LGui│LAlt│ Space │RAlt│RGui│FnLk│RCtl││ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [L_BASE] = 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,
+ FN_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, RAL_RGU, 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, FN_FNLK, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Function layer
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │Num│ │
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+ * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ Clear ││ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+ * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │UCM│ │Stp│Ply│Prv│Nxt│ ││ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
+ * │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+ * │ │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│Mut│ │ │PgU│
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+ * │ │DtPR│DtNA│ MW↓ │ │ │ │ ││Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [L_FN] = LAYOUT_tkl_iso(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NUMPAD, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, CLEAR, _______, _______, _______,
+ KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, _______, _______, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP,
+ _______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ /* Numpad layer
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐┌───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │Num│ │
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+ * │ │ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │ ││ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+ * │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ ││ │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐PEnt│└───┴───┴───┘
+ * │ │ │ │ │ │ │ │P1 │P2 │P3 │P* │ × │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+ * │ │ │ │ │ │ │ │P0 │P0 │ , │P. │P/ │ ÷ │ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+ * │ │ │ │ │ │ │ │ ││ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [L_NUMPAD] = LAYOUT_tkl_iso(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NUMPAD, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, _______, KC_PENT,
+ _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/wasdat/keymaps/konstantin/rules.mk b/keyboards/wasdat/keymaps/konstantin/rules.mk
new file mode 100644
index 000000000..4bb1ee658
--- /dev/null
+++ b/keyboards/wasdat/keymaps/konstantin/rules.mk
@@ -0,0 +1,8 @@
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODEMAP_ENABLE = yes
diff --git a/keyboards/wasdat/matrix.c b/keyboards/wasdat/matrix.c
index b481e5394..04d221971 100644
--- a/keyboards/wasdat/matrix.c
+++ b/keyboards/wasdat/matrix.c
@@ -183,7 +183,7 @@ static void unselect_row(uint8_t row)
static void unselect_rows(void)
{
for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInput(row_pins[x]);
+ setPinInputHigh(row_pins[x]);
}
}
@@ -480,5 +480,5 @@ uint8_t matrix_scan(void)
debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
matrix_scan_quantum();
- return 1;
+ return (uint8_t)changed;
}
diff --git a/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk b/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk
index efd8bd14d..bcc5dc530 100644
--- a/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk
+++ b/keyboards/westfoxtrot/aanzee/keymaps/via/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/westfoxtrot/aanzee/rules.mk b/keyboards/westfoxtrot/aanzee/rules.mk
index cdea2a265..4ba66a5f7 100644
--- a/keyboards/westfoxtrot/aanzee/rules.mk
+++ b/keyboards/westfoxtrot/aanzee/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/westfoxtrot/cypher/rules.mk b/keyboards/westfoxtrot/cypher/rules.mk
index ab03dc9f9..63cbd3675 100644
--- a/keyboards/westfoxtrot/cypher/rules.mk
+++ b/keyboards/westfoxtrot/cypher/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h
index 1364fe8a2..3c2583e2d 100644
--- a/keyboards/whitefox/keymaps/konstantin/config.h
+++ b/keyboards/whitefox/keymaps/konstantin/config.h
@@ -1,6 +1,4 @@
#pragma once
-#define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL)))
-
#define LAYER_FN
#define LAYER_NUMPAD
diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c
index c8c8c790c..3874bcd18 100644
--- a/keyboards/whitefox/keymaps/konstantin/keymap.c
+++ b/keyboards/whitefox/keymaps/konstantin/keymap.c
@@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
* │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
- * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RCtRSf│ ↑ │PgD│
+ * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RSfRCt│ ↑ │PgD│
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
* │LCtl│LGui│LAlt│ Space │RAlG│FnLk│ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
@@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL,
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RCT_RSF, KC_UP, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSF_RCT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT
),
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
* │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │Top│
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
- * │ │MA0│MA2│MW←│MW→│ │ │ │Vo-│Vo+│Mut│ App │PgU│Btm│
+ * │ │MA0│MA2│MW←│MW→│ │ │App│Vo-│Vo+│Mut│ │PgU│Btm│
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
* │ │DtPR│DtNA│ MW↓ │ │ │ │Hom│PgD│End│
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, NUMPAD, KC_SLCK, KC_PAUS,
KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS,
_______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______, TOP,
- _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_APP, KC_PGUP, BOTTOM,
+ _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_PGUP, BOTTOM,
_______, DST_P_R, DST_N_A, KC_WH_D, _______, _______, KC_HOME, KC_PGDN, KC_END
),
diff --git a/keyboards/winkeyless/bface/README.md b/keyboards/winkeyless/bface/README.md
index f1789b04c..da0eb8088 100644
--- a/keyboards/winkeyless/bface/README.md
+++ b/keyboards/winkeyless/bface/README.md
@@ -14,6 +14,8 @@ 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.
@@ -33,7 +35,7 @@ macOS:
3. Install the following packages:
```
brew install python
- brew install pyusb
+ pip3 install pyusb
brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
```
diff --git a/keyboards/winkeyless/bface/backlight_ps2avrGB.c b/keyboards/winkeyless/bface/backlight_ps2avrGB.c
deleted file mode 100644
index c0f642840..000000000
--- a/keyboards/winkeyless/bface/backlight_ps2avrGB.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Copyright 2017 Sebastian Kaim
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef BACKLIGHT_ENABLE
-
-#include "backlight_ps2avrGB.h"
-#define sbi(reg,bit) reg |= (_BV(bit))
-#define cbi(reg,bit) reg &= (~_BV(bit))
-#define PWM10 WGM10
-#define PWM11 WGM11
-#define COM1x1 COM1B1
-#define OCR1x OCR1B
-
-void backlight_init_ports(void)
-{
-#if BACKLIGHT_ON_STATE == 0
- backlight_off();
-#else
- backlight_on();
-#endif
-
- // setup pwm
- // this bitmagic is sourced from the original firmware
- /*TCCR1B = ((TCCR1B & ~0x07) | 0x03);
- TCNT1H = 0;
- TCNT1L = 0;
- sbi(TIMSK, TOIE1);
- OCR1BH = 0;
- OCR1BL = 0;
- cbi(TCCR1A,PWM11);
- sbi(TCCR1A,PWM10);
- sbi(TCCR1A,COM1B1);
- cbi(TCCR1A,COM1B0);*/
- ICR1 = 0xFFFF;
-
- TCCR1A = _BV(COM1x1) | _BV(WGM11); // = 0b00001010;
- TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
-
- backlight_init();
-}
-
-void backlight_set(uint8_t level)
-{
- if( level == 0 ) {
- backlight_off();
- }
- else {
- backlight_on();
- /*uint8_t pwm = get_pwm_for_brightness(level);
- set_backlight_pwm(pwm);
- TCCR1A |= _BV(COM1x1);
- OCR1x = (level >= 2) ? 0xFFFF : 0x00FF;*/
- }
-}
-
-#define PWM_MAX 0xFF
-uint8_t get_pwm_for_brightness(uint8_t level)
-{
- // we need to cast up here to allow multiplication with 0xFF. We could also use floats, but this is probably a lot faster.
- uint16_t brightness = (uint16_t)level * (uint16_t)PWM_MAX / (uint16_t)BACKLIGHT_LEVELS;
- return (uint8_t)brightness;
-}
-
-void backlight_on(void)
-{
- //_SFR_IO8(0x12) |= _BV(0x4);
- LED_PIN |= BACKLIGHT_PORT_NUM;
-}
-
-void backlight_off(void)
-{
- //_SFR_IO8(0x12) &= ~_BV(0x4);
- LED_PIN &= ~BACKLIGHT_PORT_NUM;
-}
-
-void set_backlight_pwm(uint8_t level) {
- // this does not work (yet)
- //OCR1B = level;
-}
-
-#endif // BACKLIGHT_ENABLE
diff --git a/keyboards/winkeyless/bface/bface.c b/keyboards/winkeyless/bface/bface.c
index 8422a4a40..1c83be4b8 100644
--- a/keyboards/winkeyless/bface/bface.c
+++ b/keyboards/winkeyless/bface/bface.c
@@ -1,30 +1,23 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-Copyright 2018 Sebastian Kaim <sebb@sebb767.de>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "bface.h"
+/* 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 "rgblight.h"
-
-#include <avr/pgmspace.h>
-
-#include "action_layer.h"
-#include "i2c.h"
+#include "i2c_master.h"
#include "quantum.h"
+#ifdef RGBLIGHT_ENABLE
extern rgblight_config_t rgblight_config;
void rgblight_set(void) {
@@ -37,10 +30,59 @@ void rgblight_set(void) {
}
i2c_init();
- i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+ 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) {
- rgblight_task();
+}
+
+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);
+ }
}
diff --git a/keyboards/winkeyless/bface/bface.h b/keyboards/winkeyless/bface/bface.h
index 62d62f695..f7a3b9521 100644
--- a/keyboards/winkeyless/bface/bface.h
+++ b/keyboards/winkeyless/bface/bface.h
@@ -16,8 +16,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
+#pragma once
#include "quantum_keycodes.h"
#include "keycode.h"
@@ -27,8 +26,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, \
K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, \
K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, \
- K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, \
- K00, K10, K20, K56, K57, KA0, KB0, KC0 \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, \
+ K00, K10, K20, K56, K57, KA0, KB0, KC0 \
){ \
{ K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KA0, KB0, KC0, KC_NO, KC_NO }, \
{ K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KC_NO, KC_NO }, \
@@ -37,8 +36,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, K16, K26, K36, K46, K56, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB6, KC6, KD6, KE6 }, \
- { KC_NO, K17, K27, K37, K47, K57, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB7, KC7, KD7, KE7 } \
+ { KC_NO, K17, K27, K37, K47, K57, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB7, KC7, KD7, KE7 } \
}
-
-#endif
diff --git a/keyboards/winkeyless/bface/config.h b/keyboards/winkeyless/bface/config.h
index 11ac373c0..7a1fe3335 100644
--- a/keyboards/winkeyless/bface/config.h
+++ b/keyboards/winkeyless/bface/config.h
@@ -16,8 +16,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
@@ -30,6 +29,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROWS 8
#define MATRIX_COLS 15
+// 0 1 2 3 4 5 6 7 8 9 A B C D E
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7}
+#define UNUSED_PINS
+
#define RGBLED_NUM 16
#define RGBLIGHT_ANIMATIONS
@@ -43,4 +47,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BACKLIGHT_PORT_NUM (1 << 4)
#endif
-#endif
diff --git a/keyboards/winkeyless/bface/i2c.c b/keyboards/winkeyless/bface/i2c.c
deleted file mode 100644
index c27f3e3d1..000000000
--- a/keyboards/winkeyless/bface/i2c.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
- uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
- if (bitrate_div >= 16) {
- bitrate_div = (bitrate_div - 16) / 2;
- }
- TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
- // set pull-up resistors on I2C bus pins
- PORTC |= 0b11;
-
- i2c_set_bitrate(400);
-
- // enable TWI (two-wire interface)
- TWCR |= (1 << TWEN);
-
- // enable TWI interrupt and slave address ACK
- TWCR |= (1 << TWIE);
- TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
- // reset TWI control register
- TWCR = 0;
-
- // begin transmission and wait for it to end
- TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the start condition was successfully transmitted
- if ((TWSR & 0xF8) != TW_START) {
- return 1;
- }
-
- // transmit address and wait
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- // check if the device has acknowledged the READ / WRITE mode
- uint8_t twst = TW_STATUS & 0xF8;
- if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
- return 1;
- }
-
- return 0;
-}
-
-void i2c_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
- TWDR = data;
-
- // transmit data and wait
- TWCR = (1<<TWINT) | (1<<TWEN);
- while (!(TWCR & (1<<TWINT)));
-
- if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
- return 1;
- }
-
- return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
- if (i2c_start(address)) {
- return 1;
- }
-
- for (uint16_t i = 0; i < length; i++) {
- if (i2c_write(data[i])) {
- return 1;
- }
- }
-
- i2c_stop();
-
- return 0;
-}
diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/README.md b/keyboards/winkeyless/bface/keymaps/p3lim/README.md
new file mode 100644
index 000000000..81f99ec96
--- /dev/null
+++ b/keyboards/winkeyless/bface/keymaps/p3lim/README.md
@@ -0,0 +1,14 @@
+# p3lim's b.face layout
+
+![](https://user-images.githubusercontent.com/26496/61170794-bf8a2c80-a56e-11e9-893f-f1766e7a9a04.png)
+
+My layout using the winkeyless b.face X2 PCB. The keys indicated with a gray color was not supported by the layout so a custom one was made.
+
+### Building & Flashing
+
+- Hold <kbd>LCTRL</kbd> while connecting to put in flashing mode
+- Follow instructions in the main _bface_ directory
+
+### Layout notes
+
+The two additional keys were on pins 22+41 and 22+42, C3+B1 and C3+B2, which is mapped to col 10 row 1 and col 10 row 2 in the matrix.
diff --git a/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c b/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c
new file mode 100644
index 000000000..0ec124529
--- /dev/null
+++ b/keyboards/winkeyless/bface/keymaps/p3lim/keymap.c
@@ -0,0 +1,156 @@
+/*
+Copyright 2019 Adrian L Lange <legal@p3lim.net>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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 "quantum.h"
+
+#define LAYOUT_p3lim(\
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, KC1, \
+ K00, K10, K20, K56, K57, KB0, KC0 \
+){ \
+ { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KC_NO, KC_NO }, \
+ { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC1, KC_NO, KC_NO }, \
+ { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC2, KD2, KC_NO }, \
+ { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KC_NO, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, K16, K26, K36, K46, K56, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB6, KC6, KD6, KE6 }, \
+ { KC_NO, K17, K27, K37, K47, K57, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB7, KC7, KD7, KE7 } \
+}
+
+enum my_keycodes {
+ C_ESC0 = SAFE_RANGE, // layer 0 esc
+ C_ESC1 // layer 1 esc
+};
+
+// use compiler macros for simpler stuff
+#define C_NO1 RALT(KC_QUOT)
+#define C_NO2 RALT(KC_SCLN)
+#define C_NO3 RALT(KC_LBRC)
+#define C_KVM1 LCA(KC_1)
+#define C_KVM2 LCA(KC_2)
+#define C_KVM3 LCA(KC_3)
+#define C_KVM4 LCA(KC_4)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | |
+ * |---------------------------------------------------------------------------------| Enter |
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | \ | |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | FN1 | Alt | GUI | Space | FN2 | Alt | Ctrl |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [0] = LAYOUT_p3lim(
+ C_ESC0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
+ MO(1), KC_LALT, KC_LGUI, KC_SPC, MO(2), KC_RGUI, KC_RCTL
+ ),
+
+ /* FN1
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps | Home| Up | End | PgUp| | | | | | | | | |
+ * |---------------------------------------------------------------------------------| |
+ * | | Left| Down|Right| PgDn| | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | KVM1| KVM2| KVM3| KVM4| | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [1] = LAYOUT_p3lim(
+ C_ESC1, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ KC_CAPS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, C_KVM1, C_KVM2, C_KVM3, C_KVM4, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_NO, _______, _______
+ ),
+
+ /* FN2
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | Å | | |
+ * |---------------------------------------------------------------------------------| |
+ * | | | | | | | | | | | Ø | Æ | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [2] = LAYOUT_p3lim(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_NO3, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, C_NO2, C_NO1, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_NO, _______, _______, _______, _______, _______, _______
+ ),
+ /*
+ [n] = LAYOUT_p3lim(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ */
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record){
+ switch(keycode){
+ case C_ESC0: // layer 0
+ if(record->event.pressed){
+ if(get_mods() & MOD_MASK_SHIFT)
+ register_code(KC_GRAVE);
+ else
+ register_code(KC_ESCAPE);
+ } else {
+ if(get_mods() & MOD_MASK_SHIFT)
+ unregister_code(KC_GRAVE);
+ else
+ unregister_code(KC_ESCAPE);
+ }
+ return false;
+ case C_ESC1: // layer 1
+ if(record->event.pressed){
+ if(get_mods() & MOD_MASK_SHIFT)
+ register_code(KC_ESCAPE);
+ else
+ register_code(KC_GRAVE);
+ } else {
+ if(get_mods() & MOD_MASK_SHIFT)
+ unregister_code(KC_ESCAPE);
+ else
+ unregister_code(KC_GRAVE);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/winkeyless/bface/matrix.c b/keyboards/winkeyless/bface/matrix.c
deleted file mode 100644
index b3761a63c..000000000
--- a/keyboards/winkeyless/bface/matrix.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
- // all outputs for rows high
- DDRB = 0xFF;
- PORTB = 0xFF;
- // all inputs for columns
- DDRA = 0x00;
- DDRC &= ~(0x111111<<2);
- DDRD &= ~(1<<PIND7);
- // all columns are pulled-up
- PORTA = 0xFF;
- PORTC |= (0b111111<<2);
- PORTD |= (1<<PIND7);
-
- // initialize matrix state: all keys off
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix[row] = 0x00;
- matrix_debouncing[row] = 0x00;
- }
-
- // activate backlight
- //PORTD |= (1 << 4);
- //_SFR_IO8(0x09) |= (1 << 4); //_BV(0x94 & 0xF);
- //
- // this is the code that *should* be executed in quantum.c
- _SFR_IO8(0x12) |= _BV(0x4);
-}
-
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_set_row_status(row);
- _delay_us(5);
-
- matrix_row_t cols = (
- // cols 0..7, PORTA 0 -> 7
- (~PINA) & 0xFF
- ) | (
- // cols 8..13, PORTC 7 -> 0
- bit_reverse((~PINC) & 0xFF) << 8
- ) | (
- // col 14, PORTD 7
- ((~PIND) & (1 << PIND7)) << 7
- );
-
- if (matrix_debouncing[row] != cols) {
- matrix_debouncing[row] = cols;
- debouncing = DEBOUNCE;
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_user();
-
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-}
diff --git a/keyboards/winkeyless/bface/rules.mk b/keyboards/winkeyless/bface/rules.mk
index 369ccf2ed..b6d172f26 100644
--- a/keyboards/winkeyless/bface/rules.mk
+++ b/keyboards/winkeyless/bface/rules.mk
@@ -25,7 +25,7 @@ NO_SUSPEND_POWER_DOWN = yes
F_CPU = 12000000
# build options
-BOOTMAGIC_ENABLE = yes
+BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = yes
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = no
@@ -40,8 +40,7 @@ OPT_DEFS = -DDEBUG_LEVEL=0
OPT_DEFS += -DBOOTLOADER_SIZE=2048
# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c backlight_ps2avrGB.c
+SRC = i2c_master.c
# programming options
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/winkeyless/bface/usbconfig.h b/keyboards/winkeyless/bface/usbconfig.h
index f87922615..192d80d91 100644
--- a/keyboards/winkeyless/bface/usbconfig.h
+++ b/keyboards/winkeyless/bface/usbconfig.h
@@ -8,8 +8,7 @@
* This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
*/
-#ifndef __usbconfig_h_included__
-#define __usbconfig_h_included__
+#pragma once
#include "config.h"
@@ -392,5 +391,3 @@ section at the end of this file).
/* #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/xd004/info.json b/keyboards/xd004/info.json
new file mode 100644
index 000000000..72c15da7f
--- /dev/null
+++ b/keyboards/xd004/info.json
@@ -0,0 +1,11 @@
+{
+ "keyboard_name": "XD004",
+ "maintainer": "",
+ "width": 4,
+ "height": 1,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"L", "x":0, "y":0}, {"label":"O", "x":1, "y":0}, {"label":"V", "x":2, "y":0}, {"label":"E", "x":3, "y":0}]
+ }
+ }
+}
diff --git a/keyboards/xd004/keymaps/default/keymap.c b/keyboards/xd004/keymaps/default/keymap.c
new file mode 100644
index 000000000..e82ce5e97
--- /dev/null
+++ b/keyboards/xd004/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(KC_L, KC_O, KC_V, KC_E),
+
+};
+
+// Loop
+void matrix_scan_user(void){
+ // Empty
+};
diff --git a/keyboards/xd004/keymaps/default/readme.md b/keyboards/xd004/keymaps/default/readme.md
new file mode 100644
index 000000000..fdf07cc87
--- /dev/null
+++ b/keyboards/xd004/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+# Default Keymap for XD004 PCB
+
+This keymap is not very useful, but it will validate that the board works.
+
+## Build
+
+To build the default keymap, simply run `make xd004:default`.
diff --git a/keyboards/xd004/keymaps/system_and_media/keymap.c b/keyboards/xd004/keymaps/system_and_media/keymap.c
new file mode 100644
index 000000000..60f0e15bb
--- /dev/null
+++ b/keyboards/xd004/keymaps/system_and_media/keymap.c
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+#define _BASE 0 // Base layer
+#define _SYSTEM 1 // System actions
+#define _VOLUME 2 // Volume actions
+
+#define SUPER_ALT_F4_TIMER 300 // Timeout on the super alt-f4 key
+
+/*
+ The idea of this is pretty simple: base layer has four action, two of which (the outermost)
+ are regular keystrokes on tap, and a momentary layer switch on hold, sending you to layers 1 and 2.
+
+ The other bit of customization here is the 'Super Alt F4' which does Alt-F4, and then Enter if tapped
+ again SUPER_ALT_F4_TIMER miliseconds after. This lets you Alt-F4 applications, and finally quickly
+ double-tap it to Alt-F4+Enter to shut down the PC.
+*/
+
+bool is_alt_f4_active = false;
+uint16_t alt_f4_timer = 0;
+
+enum custom_keycodes { // Make sure have the awesome keycode ready
+ SUPER_ALT_F4 = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ [_BASE] = LAYOUT_all(LT(_SYSTEM, KC_F5), C(G(KC_LEFT)), C(G(KC_RIGHT)), LT(_VOLUME, KC_F7)),
+
+ // 1: System actions
+ [_SYSTEM] = LAYOUT_all(_______, SUPER_ALT_F4, G(KC_D), G(KC_L)),
+
+ // 2: Volume actions
+ [_VOLUME] = LAYOUT_all(KC_MEDIA_NEXT_TRACK, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, _______),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) { // This will do most of the grunt work with the keycodes.
+ case SUPER_ALT_F4:
+ if (record->event.pressed) {
+ if (!is_alt_f4_active) {
+ is_alt_f4_active = true;
+ tap_code16(LALT(KC_F4)); // Alt-F4
+ } else {
+ tap_code(KC_ENTER); // Tap enter
+ }
+ }
+ alt_f4_timer = timer_read();
+ break;
+ }
+ return true;
+}
+
+void matrix_scan_user(void) {
+ if (is_alt_f4_active && timer_elapsed(alt_f4_timer) > SUPER_ALT_F4_TIMER) {
+ is_alt_f4_active = false;
+ }
+};
diff --git a/keyboards/xd004/keymaps/system_and_media/readme.md b/keyboards/xd004/keymaps/system_and_media/readme.md
new file mode 100644
index 000000000..d684d463c
--- /dev/null
+++ b/keyboards/xd004/keymaps/system_and_media/readme.md
@@ -0,0 +1,9 @@
+# Slightly more advanced keymap for XD004 PCB
+
+A somehow more useful keymap, allowing one to move across virtual desktops on Windows, etc.
+
+It also has a 'Super Alt-F4' key for Windows that, when tapped does Alt-F4, unless two consecutive taps are less than 300ms apart, in which case the second tap becomes Enter. This allows you to close all apps doing taps, and then when the System shutdown window arrives you do a second quick tap and it will type enter, thus shutting down the computer.
+
+## Build
+
+To build the keymap, simply run `make xd004:system_and_media`.
diff --git a/keyboards/xd004/readme.md b/keyboards/xd004/readme.md
new file mode 100644
index 000000000..8b32c6a48
--- /dev/null
+++ b/keyboards/xd004/readme.md
@@ -0,0 +1,16 @@
+XD004
+==
+
+4-keys board
+
+![Top View of a XD004 board](https://ae01.alicdn.com/kf/HTB1_G9IX21H3KVjSZFHq6zKppXa0/xd004-xiudi-4-Custom-Mechanical-Keyboard-4-keys-switch-leds-PCB-programmed-hot-swappable-macro-key.jpg)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: XD004 PCB v1.0
+Hardware Availability: [KPRepublic](https://kprepublic.com/products/xd004-xiudi-4-custom-mechanical-keyboard-4-keys-switch-leds-pcb-programmed-hot-swappable-macro-key-silver-case-micro-port)
+
+To build with a default keymap (not useful at all, have a look at other keymaps):
+
+```make xd004/v1:default```
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/xd004/v1/config.h b/keyboards/xd004/v1/config.h
new file mode 100644
index 000000000..a141137e9
--- /dev/null
+++ b/keyboards/xd004/v1/config.h
@@ -0,0 +1,80 @@
+/*
+Copyright 2019 Sidney Bovet <sidney.bovet@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/>.
+*/
+
+/*
+Note: the following configuration uses 98% of the flash memory, be
+careful if you enable anything else. Also have a look at rules.mk
+where some things are disabled to save space as well.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCDCD
+#define PRODUCT_ID 0x0404
+#define DEVICE_VER 0x0001
+// Note: unsure about manufacturer
+#define MANUFACTURER XIUDI
+#define PRODUCT XD004 v1
+#define DESCRIPTION XD004 v1 Keyboard PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * On this board we have direct connection: no diodes.
+ */
+#define DIRECT_PINS \
+ { \
+ { D3, D0, C4, B4 } \
+ }
+#define UNUSED_PINS
+
+/* Backlight Setup */
+// Looks like each backlight LED is connected to a single output, D5 is the one furtherst away from USB port
+#define BACKLIGHT_PIN D5
+#define BACKLIGHT_LEVELS 6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* RGB Underglow
+This will not be used, as RGBLIGHT_ENABLE is set to 'no' in rules.mk
+We do not have enough space in the flash for this at the moment, maybe
+further optimizations can be done on that side.
+*/
+#define RGB_DI_PIN C6
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLED_NUM 2
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/* disable action features */
+// #define NO_ACTION_ONESHOT // 462 bytes <- this needs to be un-commented out if Link Time Optimization is disabled, otherwise file is too large
+// The two below are implicit since we use LINK_TIME_OPTIMIZATION_ENABLE (in rules.mk)
+// #define NO_ACTION_MACRO
+// #define NO_ACTION_FUNCTION \ No newline at end of file
diff --git a/keyboards/xd004/v1/rules.mk b/keyboards/xd004/v1/rules.mk
new file mode 100644
index 000000000..ad2d732d4
--- /dev/null
+++ b/keyboards/xd004/v1/rules.mk
@@ -0,0 +1,70 @@
+# MCU name
+MCU = atmega16u2
+
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+# LUFA specific
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 2048
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# Saves about 5% of space:
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+
+#LAYOUTS = ortho_1x4
diff --git a/keyboards/xd004/xd004.c b/keyboards/xd004/xd004.c
new file mode 100644
index 000000000..37a1dca14
--- /dev/null
+++ b/keyboards/xd004/xd004.c
@@ -0,0 +1,7 @@
+#include "xd004.h"
+
+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/xd004/xd004.h b/keyboards/xd004/xd004.h
new file mode 100644
index 000000000..a53ad537f
--- /dev/null
+++ b/keyboards/xd004/xd004.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "quantum.h"
+//#include "led.h"
+
+/* XD60 Keymap Definition Macro */
+/*
+ +--------------------------------+
+ | K0 K1 K2 K3 [----- USB
+ +--------------------------------+
+*/
+#define LAYOUT_all(K00, K01, K02, K03) \
+ { \
+ { K00, K01, K02, K03 } \
+ }
diff --git a/keyboards/xd60/keymaps/default/keymap.c b/keyboards/xd60/keymaps/default/keymap.c
index b49803fa8..9233f99ba 100644
--- a/keyboards/xd60/keymaps/default/keymap.c
+++ b/keyboards/xd60/keymaps/default/keymap.c
@@ -20,20 +20,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// Macros
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) { register_code(KC_RSFT); }
- else { unregister_code(KC_RSFT); }
- break;
- }
-
- return MACRO_NONE;
-};
-
// Loop
void matrix_scan_user(void) {
// Empty
diff --git a/keyboards/xd60/keymaps/iso/keymap.c b/keyboards/xd60/keymaps/iso/keymap.c
index 4ece241ef..bb4f8eff8 100644
--- a/keyboards/xd60/keymaps/iso/keymap.c
+++ b/keyboards/xd60/keymaps/iso/keymap.c
@@ -24,20 +24,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-// Macros
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) { register_code(KC_RSFT); }
- else { unregister_code(KC_RSFT); }
- break;
- }
-
- return MACRO_NONE;
-};
-
// Loop
void matrix_scan_user(void) {
// Empty
diff --git a/keyboards/xd60/keymaps/split_bksp_arrows/keymap.c b/keyboards/xd60/keymaps/split_bksp_arrows/keymap.c
index f0eaa97cb..f95a4e9e7 100644
--- a/keyboards/xd60/keymaps/split_bksp_arrows/keymap.c
+++ b/keyboards/xd60/keymaps/split_bksp_arrows/keymap.c
@@ -38,20 +38,6 @@ const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1), // to Function Layer
};
-// Macros
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) { register_code(KC_RSFT); }
- else { unregister_code(KC_RSFT); }
- break;
- }
-
- return MACRO_NONE;
-};
-
// Loop
void matrix_scan_user(void) {
// Empty
diff --git a/keyboards/xd60/rev2/rules.mk b/keyboards/xd60/rev2/rules.mk
index 8a60252dc..42f9842af 100644
--- a/keyboards/xd60/rev2/rules.mk
+++ b/keyboards/xd60/rev2/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-# MCU = at90usb1287
MCU = atmega32u4
@@ -64,4 +63,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = 60_ansi \ No newline at end of file
+LAYOUTS = 60_ansi
diff --git a/keyboards/xd60/rev3/rules.mk b/keyboards/xd60/rev3/rules.mk
index f33fff76c..36f259e05 100644
--- a/keyboards/xd60/rev3/rules.mk
+++ b/keyboards/xd60/rev3/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-# MCU = at90usb1287
MCU = atmega32u4
diff --git a/keyboards/xd75/rules.mk b/keyboards/xd75/rules.mk
index e99272943..4b2682b19 100644
--- a/keyboards/xd75/rules.mk
+++ b/keyboards/xd75/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -65,4 +64,4 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-LAYOUTS = ortho_5x15 \ No newline at end of file
+LAYOUTS = ortho_5x15
diff --git a/keyboards/xd87/rules.mk b/keyboards/xd87/rules.mk
index 39540e701..b0a417e2a 100644
--- a/keyboards/xd87/rules.mk
+++ b/keyboards/xd87/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/xd96/info.json b/keyboards/xd96/info.json
index f18068273..2d678414c 100644
--- a/keyboards/xd96/info.json
+++ b/keyboards/xd96/info.json
@@ -7,11 +7,231 @@
"layouts": {
"LAYOUT_96_ansi": {
"key_count": 99,
- "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":"Insert", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"End", "x":16, "y":0}, {"label":"PgUp", "x":17, "y":0}, {"label":"PgDn", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"+", "x":18, "y":2, "h":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"Shift", "x":0, "y":4, "w":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":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Enter", "x":18, "y":4, "h":2}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"0", "x":16, "y":5}, {"label":".", "x":17, "y":5}]
+ "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":"Insert", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"End", "x":16, "y":0},
+ {"label":"PgUp", "x":17, "y":0},
+ {"label":"PgDn", "x":18, "y":0},
+
+ {"label":"~", "x":0, "y":1},
+ {"label":"!", "x":1, "y":1},
+ {"label":"@", "x":2, "y":1},
+ {"label":"#", "x":3, "y":1},
+ {"label":"$", "x":4, "y":1},
+ {"label":"%", "x":5, "y":1},
+ {"label":"^", "x":6, "y":1},
+ {"label":"&", "x":7, "y":1},
+ {"label":"*", "x":8, "y":1},
+ {"label":"(", "x":9, "y":1},
+ {"label":")", "x":10, "y":1},
+ {"label":"_", "x":11, "y":1},
+ {"label":"+", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+
+ {"label":"Num Lock", "x":15, "y":1},
+ {"label":"/", "x":16, "y":1},
+ {"label":"*", "x":17, "y":1},
+ {"label":"-", "x":18, "y":1},
+
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"{", "x":11.5, "y":2},
+ {"label":"}", "x":12.5, "y":2},
+ {"label":"|", "x":13.5, "y":2, "w":1.5},
+ {"label":"7", "x":15, "y":2},
+ {"label":"8", "x":16, "y":2},
+ {"label":"9", "x":17, "y":2},
+
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":":", "x":10.75, "y":3},
+ {"label":"\"", "x":11.75, "y":3},
+ {"label":"Enter", "x":12.75, "y":3, "w":2.25},
+
+ {"label":"4", "x":15, "y":3},
+ {"label":"5", "x":16, "y":3},
+ {"label":"6", "x":17, "y":3},
+ {"label":"+", "x":18, "y":2, "h":2},
+
+ {"label":"Shift", "x":0, "y":4, "w":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":"1", "x":15, "y":4},
+ {"label":"2", "x":16, "y":4},
+ {"label":"3", "x":17, "y":4},
+
+ {"label":"Ctrl", "x":0, "y":5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5, "w":1.25},
+ {"x":3.75, "y":5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5, "w":1.5},
+ {"label":"Ctrl", "x":11.5, "y":5, "w":1.5},
+ {"label":"\u2190", "x":13, "y":5},
+ {"label":"\u2193", "x":14, "y":5},
+ {"label":"\u2192", "x":15, "y":5},
+
+ {"label":"0", "x":16, "y":5},
+ {"label":".", "x":17, "y":5},
+ {"label":"Enter", "x":18, "y":4, "h":2}
+ ]
},
"LAYOUT_96_iso": {
"key_count": 100,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"Insert", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"End", "x":16, "y":0}, {"label":"PgUp", "x":17, "y":0}, {"label":"PgDn", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"\"", "x":2, "y":1}, {"label":"\u00a3", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"+", "x":18, "y":2, "h":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"@", "x":11.75, "y":3}, {"label":"~", "x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"label":"|", "x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Enter", "x":18, "y":4, "h":2}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"0", "x":16, "y":5}, {"label":".", "x":17, "y":5}]
+ "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":"Insert", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"End", "x":16, "y":0},
+ {"label":"PgUp", "x":17, "y":0},
+ {"label":"PgDn", "x":18, "y":0},
+
+ {"label":"~", "x":0, "y":1},
+ {"label":"!", "x":1, "y":1},
+ {"label":"\"", "x":2, "y":1},
+ {"label":"\u00a3", "x":3, "y":1},
+ {"label":"$", "x":4, "y":1},
+ {"label":"%", "x":5, "y":1},
+ {"label":"^", "x":6, "y":1},
+ {"label":"&", "x":7, "y":1},
+ {"label":"*", "x":8, "y":1},
+ {"label":"(", "x":9, "y":1},
+ {"label":")", "x":10, "y":1},
+ {"label":"_", "x":11, "y":1},
+ {"label":"+", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+
+ {"label":"Num Lock", "x":15, "y":1},
+ {"label":"/", "x":16, "y":1},
+ {"label":"*", "x":17, "y":1},
+ {"label":"-", "x":18, "y":1},
+
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"{", "x":11.5, "y":2},
+ {"label":"}", "x":12.5, "y":2},
+
+ {"label":"7", "x":15, "y":2},
+ {"label":"8", "x":16, "y":2},
+ {"label":"9", "x":17, "y":2},
+
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":":", "x":10.75, "y":3},
+ {"label":"@", "x":11.75, "y":3},
+ {"label":"~", "x":12.75, "y":3},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
+
+ {"label":"4", "x":15, "y":3},
+ {"label":"5", "x":16, "y":3},
+ {"label":"6", "x":17, "y":3},
+ {"label":"+", "x":18, "y":2, "h":2},
+
+ {"label":"Shift", "x":0, "y":4, "w":1.25},
+ {"label":"|", "x":1.25, "y":4},
+ {"label":"Z", "x":2.25, "y":4},
+ {"label":"X", "x":3.25, "y":4},
+ {"label":"C", "x":4.25, "y":4},
+ {"label":"V", "x":5.25, "y":4},
+ {"label":"B", "x":6.25, "y":4},
+ {"label":"N", "x":7.25, "y":4},
+ {"label":"M", "x":8.25, "y":4},
+ {"label":"<", "x":9.25, "y":4},
+ {"label":">", "x":10.25, "y":4},
+ {"label":"?", "x":11.25, "y":4},
+ {"label":"Shift", "x":12.25, "y":4, "w":1.75},
+ {"label":"\u2191", "x":14, "y":4},
+
+ {"label":"1", "x":15, "y":4},
+ {"label":"2", "x":16, "y":4},
+ {"label":"3", "x":17, "y":4},
+
+ {"label":"Ctrl", "x":0, "y":5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5, "w":1.25},
+ {"x":3.75, "y":5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5, "w":1.5},
+ {"label":"Ctrl", "x":11.5, "y":5, "w":1.5},
+ {"label":"\u2190", "x":13, "y":5},
+ {"label":"\u2193", "x":14, "y":5},
+ {"label":"\u2192", "x":15, "y":5},
+
+ {"label":"0", "x":16, "y":5},
+ {"label":".", "x":17, "y":5},
+ {"label":"Enter", "x":18, "y":4, "h":2}
+ ]
}
}
}
diff --git a/keyboards/yd68/rules.mk b/keyboards/yd68/rules.mk
index 197402e8a..2a18c0015 100644
--- a/keyboards/yd68/rules.mk
+++ b/keyboards/yd68/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/yosino58/rules.mk b/keyboards/yosino58/rules.mk
index f2934454d..25f135a8e 100644
--- a/keyboards/yosino58/rules.mk
+++ b/keyboards/yosino58/rules.mk
@@ -6,7 +6,6 @@ SRC += ssd1306.c
# CFLAGS += -flto
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/keyboards/zinc/rules.mk b/keyboards/zinc/rules.mk
index 5236c0bb0..7574af387 100644
--- a/keyboards/zinc/rules.mk
+++ b/keyboards/zinc/rules.mk
@@ -2,7 +2,6 @@
SRC += serial.c
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
diff --git a/layouts/community/ergodox/reset_eeprom/keymap.c b/layouts/community/ergodox/reset_eeprom/keymap.c
index 9033205b9..83c252a9a 100644
--- a/layouts/community/ergodox/reset_eeprom/keymap.c
+++ b/layouts/community/ergodox/reset_eeprom/keymap.c
@@ -60,24 +60,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- break;
- case 1:
- if (record->event.pressed) { // For resetting EEPROM
- eeconfig_init();
- }
- break;
- }
- return MACRO_NONE;
-};
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// dynamically generate these.
diff --git a/layouts/community/ortho_1x4/belgorath/keymap.c b/layouts/community/ortho_1x4/belgorath/keymap.c
new file mode 100644
index 000000000..ace402295
--- /dev/null
+++ b/layouts/community/ortho_1x4/belgorath/keymap.c
@@ -0,0 +1,24 @@
+#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 _DEFAULT 0
+#define _LOWER 1
+#define LOWER LT(_LOWER, KC_PENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_DEFAULT] = LAYOUT_ortho_1x4 (
+ LOWER, KC_P0, KC_PDOT,KC_PAST
+),
+
+/* Lower */
+[_LOWER] = LAYOUT_ortho_1x4 (
+ _______,_______,_______,_______
+),
+};
diff --git a/layouts/community/ortho_1x4/layout.json b/layouts/community/ortho_1x4/layout.json
new file mode 100644
index 000000000..6103c7e24
--- /dev/null
+++ b/layouts/community/ortho_1x4/layout.json
@@ -0,0 +1 @@
+["","","",""] \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/jotix/config.h b/layouts/community/ortho_4x12/jotix/config.h
deleted file mode 100644
index 9ec4fd1a9..000000000
--- a/layouts/community/ortho_4x12/jotix/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#define TAPPING_TOGGLE 2
diff --git a/layouts/community/ortho_4x12/jotix/keymap.c b/layouts/community/ortho_4x12/jotix/keymap.c
index e5f539181..d1e8b3958 100644
--- a/layouts/community/ortho_4x12/jotix/keymap.c
+++ b/layouts/community/ortho_4x12/jotix/keymap.c
@@ -1,15 +1,19 @@
#include QMK_KEYBOARD_H
-
-extern keymap_config_t keymap_config;
+#include "unicode.c"
enum layers {
- _QWERTY,
- _LOWER,
- _RAISE,
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _UNI_LCK
};
-#define LOWER TT(_LOWER)
-#define RAISE TT(_RAISE)
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define UNI_LCK MO(_UNI_LCK)
+#define TGLOWER TG(_LOWER)
+#define TGRAISE TG(_RAISE)
+#define SHRAISE LM(_RAISE, MOD_LSFT)
static bool is_ctl_pressed;
static bool is_esc_pressed;
@@ -17,65 +21,59 @@ static bool is_bspc_pressed;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* qwerty
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | esc | Q | W | E | R | T | Y | U | I | O | P | bspc |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | tab | A | S | D | F | G | H | J | K | L | ; | ' |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | lshift | Z | X | C | V | B | N | M | , | . | / | enter |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | lctrl | lgui | lalt | ralt | lower | space | space | raise | right | down | up | right |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
-[_QWERTY] = LAYOUT_ortho_4x12 (
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_RALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
+[_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_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,UNI_LCK, LOWER , KC_SPC, KC_SPC, RAISE ,SHRAISE,KC_LEFT,KC_DOWN,KC_RGHT
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
+),
-/* lower
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | | vol- | mute | vol+ | | | | | | | | |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | | prev | play | next | | | | | | | | |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | | | | | | | | | | | | |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
[_LOWER] = LAYOUT_ortho_4x12 (
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 ,_______, KC_INS, KC_P7 , KC_P8 , KC_P9 ,KC_PMNS,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 ,KC_HOME,KC_PGUP, KC_P4 , KC_P5 , KC_P6 ,KC_PPLS,KC_PENT,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______, KC_F9 , KC_F10, KC_F11, KC_F12, KC_END,KC_PGDN, KC_P1 , KC_P2 , KC_P3 ,KC_PAST,KC_PSLS,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______,_______,_______,_______,_______,_______,_______,_______, KC_P0 ,KC_PDOT,KC_LPRN,KC_RPRN
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
-/* raise
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | del |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | | F7 | F8 | F9 | F10 | F11 | F12 | _ | + | { | } | | |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | | | | | | | | | home | pgdn | pgup | end |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
[_RAISE] = LAYOUT_ortho_4x12 (
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
- KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
+ KC_GRV, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ KC_CAPS,_______,_______,_______,_______,_______,KC_LBRC,KC_RBRC,KC_BSLS,KC_QUOT,_______,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______,_______,_______,_______,_______,_______,KC_MINS, KC_EQL,_______,_______,KC_VOLU,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_VOLD,KC_MUTE
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
+),
+
+[_UNI_LCK] = LAYOUT_ortho_4x12 (
+// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
+ UN_ESC, UN_Q , UN_W , UN_E , UN_R , UN_T , UN_Y , UN_U , UN_I , UN_O , UN_P ,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______, UN_A , UN_S , UN_D , UN_F , UN_G , UN_H , UN_J , UN_K , UN_L ,UN_SCLN,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ _______, UN_Z , UN_X , UN_C , UN_V , UN_B , UN_N , UN_M ,UN_COMM, UN_DOT, UN_UP ,UN_SLSH,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+ UC_M_LN,UC_M_WI,UC_M_OS,_______,TGLOWER,_______,_______,TGRAISE,_______,UN_LEFT,UN_DOWN,UN_RGHT
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
),
};
uint32_t layer_state_set_user(uint32_t state) {
#ifdef JOTANCK_LEDS
- switch (biton32(state)) {
+ switch (biton32(state)) {
case _LOWER:
writePinHigh(JOTANCK_LED1);
writePinLow(JOTANCK_LED2);
@@ -84,6 +82,10 @@ uint32_t layer_state_set_user(uint32_t state) {
writePinLow(JOTANCK_LED1);
writePinHigh(JOTANCK_LED2);
break;
+ case _UNI_LCK:
+ writePinHigh(JOTANCK_LED1);
+ writePinHigh(JOTANCK_LED2);
+ break;
default:
writePinLow(JOTANCK_LED1);
writePinLow(JOTANCK_LED2);
@@ -93,6 +95,16 @@ uint32_t layer_state_set_user(uint32_t state) {
return state;
}
+void led_set_user(uint8_t usb_led) {
+ if (!(IS_LED_ON(usb_led, USB_LED_NUM_LOCK))) {
+ tap_code(KC_NUMLOCK);
+ }
+}
+
+void keyboard_post_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+}
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case KC_LCTL:
@@ -107,7 +119,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
};
return true;
}
-
void matrix_scan_user(void) {
if (is_ctl_pressed && is_esc_pressed && is_bspc_pressed) {
reset_keyboard();
diff --git a/layouts/community/ortho_4x12/jotix/readme.md b/layouts/community/ortho_4x12/jotix/readme.md
index ed4aa7414..dda5b81de 100644
--- a/layouts/community/ortho_4x12/jotix/readme.md
+++ b/layouts/community/ortho_4x12/jotix/readme.md
@@ -1,6 +1,6 @@
# Jotix ortho 4x12 keymap
-![keymap](https://i.imgur.com/ocZCRkN.png)
+![keymap](https://i.imgur.com/hfCyDRD.png)
Tested on:
diff --git a/layouts/community/ortho_4x12/jotix/rules.mk b/layouts/community/ortho_4x12/jotix/rules.mk
new file mode 100644
index 000000000..0517619ed
--- /dev/null
+++ b/layouts/community/ortho_4x12/jotix/rules.mk
@@ -0,0 +1 @@
+UNICODEMAP_ENABLE = yes \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/jotix/unicode.c b/layouts/community/ortho_4x12/jotix/unicode.c
new file mode 100644
index 000000000..eaa0da1ac
--- /dev/null
+++ b/layouts/community/ortho_4x12/jotix/unicode.c
@@ -0,0 +1,185 @@
+enum unicode_names {
+ A_ACUTE,
+ A_ACUTEC,
+ E_ACUTE,
+ E_ACUTEC,
+ I_ACUTE,
+ I_ACUTEC,
+ O_ACUTE,
+ O_ACUTEC,
+ U_ACUTE,
+ U_ACUTEC,
+ U_DIERESIS,
+ U_DIERESISC,
+ N_TILDE,
+ N_TILDEC,
+ OPEN_EXCML,
+ OPEN_QUEST,
+ EURO,
+ POUND,
+ LEFT_ARROW,
+ DOWN_ARROW,
+ UP_ARROW,
+ RIGHT_ARROW,
+ LEFT_DARROW,
+ DOWN_DARROW,
+ UP_DARROW,
+ RIGHT_DAROW,
+ LEFT_DQUOT,
+ RGHT_DQUOT,
+ DEGREE,
+ DEGREE_CELCIUS,
+ SUPER_1,
+ SUPER_2,
+ SUPER_3,
+ ONE_HALF,
+ PER_MILLE,
+ PER_THOUS,
+ PILCROW,
+ COPYRIGHT,
+ REGISTERED,
+ MICRO,
+ MIDDLE_DOT,
+ BOX_CORNER_1,
+ BOX_CORNER_2,
+ BOX_CORNER_3,
+ BOX_CORNER_4,
+ BOX_HORIZONTAL,
+ BOX_VERTICAL,
+ BOX_CROSS,
+ BOX_UNION_1,
+ BOX_UNION_2,
+ BOX_UNION_3,
+ BOX_UNION_4,
+ DBOX_CORNER_1,
+ DBOX_CORNER_2,
+ DBOX_CORNER_3,
+ DBOX_CORNER_4,
+ DBOX_HORIZONT,
+ DBOX_VERTICAL,
+ DBOX_CROSS,
+ DBOX_UNION_1,
+ DBOX_UNION_2,
+ DBOX_UNION_3,
+ DBOX_UNION_4,
+ LESS_EQUAL,
+ MORE_EQUAL,
+ DIVISION,
+ SQUARE_ROOT,
+ CUBE_ROOT,
+ SPADE_SUIT,
+ TREBOL_SUIT,
+ HEART_SUIT,
+ DIAMOND_SUIT,
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [A_ACUTE] = 0x00E1,
+ [A_ACUTEC] = 0x00C1,
+ [E_ACUTE] = 0x00E9,
+ [E_ACUTEC] = 0x00C9,
+ [I_ACUTE] = 0x00ED,
+ [I_ACUTEC] = 0x00CD,
+ [O_ACUTE] = 0x00F3,
+ [O_ACUTEC] = 0x00D3,
+ [U_ACUTE] = 0x00FA,
+ [U_ACUTEC] = 0x00DA,
+ [U_DIERESIS] = 0x00FC,
+ [U_DIERESISC] = 0x00DC,
+ [N_TILDE] = 0x00F1,
+ [N_TILDEC] = 0x00D1,
+ [OPEN_EXCML] = 0x00A1,
+ [OPEN_QUEST] = 0x00BF,
+ [EURO] = 0x20AC,
+ [POUND] = 0x00A3,
+ [LEFT_ARROW] = 0x2190,
+ [DOWN_ARROW] = 0x2193,
+ [UP_ARROW] = 0x2191,
+ [RIGHT_ARROW] = 0x2192,
+ [LEFT_DARROW] = 0x21E6,
+ [DOWN_DARROW] = 0x21D3,
+ [UP_DARROW] = 0x21D1,
+ [RIGHT_DAROW] = 0x21D2,
+ [LEFT_DQUOT] = 0x00AB,
+ [RGHT_DQUOT] = 0x00BB,
+ [DEGREE] = 0x00B0,
+ [DEGREE_CELCIUS]= 0x2103,
+ [SUPER_1] = 0x00B9,
+ [SUPER_2] = 0x00B2,
+ [SUPER_3] = 0x00B3,
+ [ONE_HALF] = 0x00BD,
+ [PER_MILLE] = 0x0609,
+ [PER_THOUS] = 0x060A,
+ [PILCROW] = 0x00B6,
+ [COPYRIGHT] = 0x00A9,
+ [REGISTERED] = 0x00AE,
+ [MICRO] = 0x00B5,
+ [MIDDLE_DOT] = 0x00B7,
+ [BOX_CORNER_1] = 0x250C,
+ [BOX_CORNER_2] = 0x2510,
+ [BOX_CORNER_3] = 0x2514,
+ [BOX_CORNER_4] = 0x2518,
+ [BOX_HORIZONTAL]= 0x2500,
+ [BOX_VERTICAL] = 0x2502,
+ [BOX_CROSS] = 0x253C,
+ [BOX_UNION_1] = 0x2524,
+ [BOX_UNION_2] = 0x252C,
+ [BOX_UNION_3] = 0x2534,
+ [BOX_UNION_4] = 0x251C,
+ [DBOX_CORNER_1] = 0x2554,
+ [DBOX_CORNER_2] = 0x2557,
+ [DBOX_CORNER_3] = 0x255A,
+ [DBOX_CORNER_4] = 0x255D,
+ [DBOX_HORIZONT] = 0x2550,
+ [DBOX_VERTICAL] = 0x2551,
+ [DBOX_CROSS] = 0x256C,
+ [DBOX_UNION_1] = 0x2563,
+ [DBOX_UNION_2] = 0x2566,
+ [DBOX_UNION_3] = 0x2569,
+ [DBOX_UNION_4] = 0x2560,
+ [LESS_EQUAL] = 0x2264,
+ [MORE_EQUAL] = 0x2265,
+ [DIVISION] = 0x00F7,
+ [SQUARE_ROOT] = 0x221A,
+ [CUBE_ROOT] = 0x221B,
+ [SPADE_SUIT] = 0x2660,
+ [TREBOL_SUIT] = 0x2663,
+ [HEART_SUIT] = 0x2664,
+ [DIAMOND_SUIT] = 0x2665
+};
+
+#define UN_ESC XP(DEGREE, DEGREE_CELCIUS)
+#define UN_Q XP(OPEN_EXCML, SUPER_1)
+#define UN_W XP(SUPER_2, SUPER_3)
+#define UN_E XP(E_ACUTE, E_ACUTEC)
+#define UN_R XP(EURO, ONE_HALF)
+#define UN_T XP(PER_MILLE, PER_THOUS)
+#define UN_Y XP(U_DIERESIS, U_DIERESISC)
+#define UN_U XP(U_ACUTE, U_ACUTEC)
+#define UN_I XP(I_ACUTE, I_ACUTEC)
+#define UN_O XP(O_ACUTE, O_ACUTEC)
+#define UN_P XP(POUND, PILCROW)
+#define UN_A XP(A_ACUTE, A_ACUTEC)
+#define UN_S XP(BOX_CORNER_1, DBOX_CORNER_1)
+#define UN_D XP(BOX_CORNER_2, DBOX_CORNER_2)
+#define UN_F XP(BOX_CORNER_3, DBOX_CORNER_3)
+#define UN_G XP(BOX_CORNER_4, DBOX_CORNER_4)
+#define UN_H XP(BOX_UNION_1, DBOX_UNION_1)
+#define UN_J XP(BOX_UNION_2, DBOX_UNION_2)
+#define UN_K XP(BOX_UNION_3, DBOX_UNION_3)
+#define UN_L XP(BOX_UNION_4, DBOX_UNION_4)
+#define UN_SCLN XP(BOX_HORIZONTAL, DBOX_HORIZONT)
+#define UN_Z XP(BOX_VERTICAL, DBOX_VERTICAL)
+#define UN_X XP(BOX_CROSS, DBOX_CROSS)
+#define UN_C XP(COPYRIGHT, REGISTERED)
+#define UN_V XP(SPADE_SUIT, TREBOL_SUIT)
+#define UN_B XP(HEART_SUIT, DIAMOND_SUIT)
+#define UN_N XP(N_TILDE, N_TILDEC)
+#define UN_M XP(MICRO, MIDDLE_DOT)
+#define UN_COMM XP(LESS_EQUAL, LEFT_DQUOT)
+#define UN_DOT XP(MORE_EQUAL, RGHT_DQUOT)
+#define UN_SLSH XP(OPEN_QUEST, DIVISION)
+#define UN_LEFT XP(LEFT_ARROW, LEFT_DARROW)
+#define UN_DOWN XP(DOWN_ARROW, DOWN_DARROW)
+#define UN_UP XP(UP_ARROW, UP_DARROW)
+#define UN_RGHT XP(RIGHT_ARROW, RIGHT_DAROW) \ No newline at end of file
diff --git a/lib/lufa/Bootloaders/DFU/makefile b/lib/lufa/Bootloaders/DFU/makefile
index 0d2014015..a10a57637 100644
--- a/lib/lufa/Bootloaders/DFU/makefile
+++ b/lib/lufa/Bootloaders/DFU/makefile
@@ -11,11 +11,11 @@
# Run "make help" for target help.
-MCU = atmega32u4
-ARCH = AVR8
-BOARD = QMK
-F_CPU = 16000000
-F_USB = $(F_CPU)
+MCU ?= atmega32u4
+ARCH ?= AVR8
+BOARD ?= QMK
+F_CPU ?= 16000000
+F_USB ?= $(F_CPU)
OPTIMIZATION = s
TARGET = BootloaderDFU
SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB)
@@ -26,8 +26,8 @@ LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAG
# Flash size and bootloader section sizes of the target, in KB. These must
# match the target's total FLASH size and the bootloader size set in the
# device's fuses.
-FLASH_SIZE_KB = 32
-BOOT_SECTION_SIZE_KB = 4
+FLASH_SIZE_KB ?= 32
+BOOT_SECTION_SIZE_KB ?= 4
# Bootloader address calculation formulas
# Do not modify these macros, but rather modify the dependent values above.
diff --git a/lib/python/milc.py b/lib/python/milc.py
new file mode 100644
index 000000000..6e82edf8b
--- /dev/null
+++ b/lib/python/milc.py
@@ -0,0 +1,716 @@
+#!/usr/bin/env python3
+# coding=utf-8
+"""MILC - A CLI Framework
+
+PYTHON_ARGCOMPLETE_OK
+
+MILC is an opinionated framework for writing CLI apps. It optimizes for the
+most common unix tool pattern- small tools that are run from the command
+line but generally do not feature any user interaction while they run.
+
+For more details see the MILC documentation:
+
+ <https://github.com/clueboard/milc/tree/master/docs>
+"""
+from __future__ import division, print_function, unicode_literals
+import argparse
+import logging
+import os
+import re
+import sys
+from decimal import Decimal
+from tempfile import NamedTemporaryFile
+from time import sleep
+
+try:
+ from ConfigParser import RawConfigParser
+except ImportError:
+ from configparser import RawConfigParser
+
+try:
+ import thread
+ import threading
+except ImportError:
+ thread = None
+
+import argcomplete
+import colorama
+
+# Log Level Representations
+EMOJI_LOGLEVELS = {
+ 'CRITICAL': '{bg_red}{fg_white}¬_¬{style_reset_all}',
+ 'ERROR': '{fg_red}☒{style_reset_all}',
+ 'WARNING': '{fg_yellow}⚠{style_reset_all}',
+ 'INFO': '{fg_blue}ℹ{style_reset_all}',
+ 'DEBUG': '{fg_cyan}☐{style_reset_all}',
+ 'NOTSET': '{style_reset_all}¯\\_(o_o)_/¯'
+}
+EMOJI_LOGLEVELS['FATAL'] = EMOJI_LOGLEVELS['CRITICAL']
+EMOJI_LOGLEVELS['WARN'] = EMOJI_LOGLEVELS['WARNING']
+
+# ANSI Color setup
+# Regex was gratefully borrowed from kfir on stackoverflow:
+# https://stackoverflow.com/a/45448194
+ansi_regex = r'\x1b(' \
+ r'(\[\??\d+[hl])|' \
+ r'([=<>a-kzNM78])|' \
+ r'([\(\)][a-b0-2])|' \
+ r'(\[\d{0,2}[ma-dgkjqi])|' \
+ r'(\[\d+;\d+[hfy]?)|' \
+ r'(\[;?[hf])|' \
+ r'(#[3-68])|' \
+ r'([01356]n)|' \
+ r'(O[mlnp-z]?)|' \
+ r'(/Z)|' \
+ r'(\d+)|' \
+ r'(\[\?\d;\d0c)|' \
+ r'(\d;\dR))'
+ansi_escape = re.compile(ansi_regex, flags=re.IGNORECASE)
+ansi_styles = (
+ ('fg', colorama.ansi.AnsiFore()),
+ ('bg', colorama.ansi.AnsiBack()),
+ ('style', colorama.ansi.AnsiStyle()),
+)
+ansi_colors = {}
+
+for prefix, obj in ansi_styles:
+ for color in [x for x in obj.__dict__ if not x.startswith('_')]:
+ ansi_colors[prefix + '_' + color.lower()] = getattr(obj, color)
+
+
+def format_ansi(text):
+ """Return a copy of text with certain strings replaced with ansi.
+ """
+ # Avoid .format() so we don't have to worry about the log content
+ for color in ansi_colors:
+ text = text.replace('{%s}' % color, ansi_colors[color])
+ return text + ansi_colors['style_reset_all']
+
+
+class ANSIFormatter(logging.Formatter):
+ """A log formatter that inserts ANSI color.
+ """
+
+ def format(self, record):
+ msg = super(ANSIFormatter, self).format(record)
+ return format_ansi(msg)
+
+
+class ANSIEmojiLoglevelFormatter(ANSIFormatter):
+ """A log formatter that makes the loglevel an emoji.
+ """
+
+ def format(self, record):
+ record.levelname = EMOJI_LOGLEVELS[record.levelname].format(**ansi_colors)
+ return super(ANSIEmojiLoglevelFormatter, self).format(record)
+
+
+class ANSIStrippingFormatter(ANSIFormatter):
+ """A log formatter that strips ANSI.
+ """
+
+ def format(self, record):
+ msg = super(ANSIStrippingFormatter, self).format(record)
+ return ansi_escape.sub('', msg)
+
+
+class Configuration(object):
+ """Represents the running configuration.
+
+ This class never raises IndexError, instead it will return None if a
+ section or option does not yet exist.
+ """
+
+ def __contains__(self, key):
+ return self._config.__contains__(key)
+
+ def __iter__(self):
+ return self._config.__iter__()
+
+ def __len__(self):
+ return self._config.__len__()
+
+ def __repr__(self):
+ return self._config.__repr__()
+
+ def keys(self):
+ return self._config.keys()
+
+ def items(self):
+ return self._config.items()
+
+ def values(self):
+ return self._config.values()
+
+ def __init__(self, *args, **kwargs):
+ self._config = {}
+ self.default_container = ConfigurationOption
+
+ def __getitem__(self, key):
+ """Returns a config section, creating it if it doesn't exist yet.
+ """
+ if key not in self._config:
+ self.__dict__[key] = self._config[key] = ConfigurationOption()
+
+ return self._config[key]
+
+ def __setitem__(self, key, value):
+ self.__dict__[key] = value
+ self._config[key] = value
+
+ def __delitem__(self, key):
+ if key in self.__dict__ and key[0] != '_':
+ del self.__dict__[key]
+ del self._config[key]
+
+
+class ConfigurationOption(Configuration):
+ def __init__(self, *args, **kwargs):
+ super(ConfigurationOption, self).__init__(*args, **kwargs)
+ self.default_container = dict
+
+ def __getitem__(self, key):
+ """Returns a config section, creating it if it doesn't exist yet.
+ """
+ if key not in self._config:
+ self.__dict__[key] = self._config[key] = None
+
+ return self._config[key]
+
+
+def handle_store_boolean(self, *args, **kwargs):
+ """Does the add_argument for action='store_boolean'.
+ """
+ kwargs['add_dest'] = False
+ disabled_args = None
+ disabled_kwargs = kwargs.copy()
+ disabled_kwargs['action'] = 'store_false'
+ disabled_kwargs['help'] = 'Disable ' + kwargs['help']
+ kwargs['action'] = 'store_true'
+ kwargs['help'] = 'Enable ' + kwargs['help']
+
+ for flag in args:
+ if flag[:2] == '--':
+ disabled_args = ('--no-' + flag[2:],)
+ break
+
+ self.add_argument(*args, **kwargs)
+ self.add_argument(*disabled_args, **disabled_kwargs)
+
+ return (args, kwargs, disabled_args, disabled_kwargs)
+
+
+class SubparserWrapper(object):
+ """Wrap subparsers so we can populate the normal and the shadow parser.
+ """
+
+ def __init__(self, cli, submodule, subparser):
+ self.cli = cli
+ self.submodule = submodule
+ self.subparser = subparser
+
+ for attr in dir(subparser):
+ if not hasattr(self, attr):
+ setattr(self, attr, getattr(subparser, attr))
+
+ def completer(self, completer):
+ """Add an arpcomplete completer to this subcommand.
+ """
+ self.subparser.completer = completer
+
+ def add_argument(self, *args, **kwargs):
+ if kwargs.get('add_dest', True):
+ kwargs['dest'] = self.submodule + '_' + self.cli.get_argument_name(*args, **kwargs)
+ if 'add_dest' in kwargs:
+ del kwargs['add_dest']
+
+ if 'action' in kwargs and kwargs['action'] == 'store_boolean':
+ return handle_store_boolean(self, *args, **kwargs)
+
+ self.cli.acquire_lock()
+ self.subparser.add_argument(*args, **kwargs)
+
+ if 'default' in kwargs:
+ del kwargs['default']
+ if 'action' in kwargs and kwargs['action'] == 'store_false':
+ kwargs['action'] == 'store_true'
+ self.cli.subcommands_default[self.submodule].add_argument(*args, **kwargs)
+ self.cli.release_lock()
+
+
+class MILC(object):
+ """MILC - An Opinionated Batteries Included Framework
+ """
+
+ def __init__(self):
+ """Initialize the MILC object.
+ """
+ # Setup a lock for thread safety
+ self._lock = threading.RLock() if thread else None
+
+ # Define some basic info
+ self.acquire_lock()
+ self._description = None
+ self._entrypoint = None
+ self._inside_context_manager = False
+ self.ansi = ansi_colors
+ self.config = Configuration()
+ self.config_file = None
+ self.prog_name = sys.argv[0][:-3] if sys.argv[0].endswith('.py') else sys.argv[0]
+ self.version = os.environ.get('QMK_VERSION', 'unknown')
+ self.release_lock()
+
+ # Initialize all the things
+ self.initialize_argparse()
+ self.initialize_logging()
+
+ @property
+ def description(self):
+ return self._description
+
+ @description.setter
+ def description(self, value):
+ self._description = self._arg_parser.description = self._arg_defaults.description = value
+
+ def echo(self, text, *args, **kwargs):
+ """Print colorized text to stdout, as long as stdout is a tty.
+
+ ANSI color strings (such as {fg-blue}) will be converted into ANSI
+ escape sequences, and the ANSI reset sequence will be added to all
+ strings.
+
+ If *args or **kwargs are passed they will be used to %-format the strings.
+ """
+ if args and kwargs:
+ raise RuntimeError('You can only specify *args or **kwargs, not both!')
+
+ if sys.stdout.isatty():
+ args = args or kwargs
+ text = format_ansi(text)
+
+ print(text % args)
+
+ def initialize_argparse(self):
+ """Prepare to process arguments from sys.argv.
+ """
+ kwargs = {
+ 'fromfile_prefix_chars': '@',
+ 'conflict_handler': 'resolve',
+ }
+
+ self.acquire_lock()
+ self.subcommands = {}
+ self.subcommands_default = {}
+ self._subparsers = None
+ self._subparsers_default = None
+ self.argwarn = argcomplete.warn
+ self.args = None
+ self._arg_defaults = argparse.ArgumentParser(**kwargs)
+ self._arg_parser = argparse.ArgumentParser(**kwargs)
+ self.set_defaults = self._arg_parser.set_defaults
+ self.print_usage = self._arg_parser.print_usage
+ self.print_help = self._arg_parser.print_help
+ self.release_lock()
+
+ def completer(self, completer):
+ """Add an arpcomplete completer to this subcommand.
+ """
+ self._arg_parser.completer = completer
+
+ def add_argument(self, *args, **kwargs):
+ """Wrapper to add arguments to both the main and the shadow argparser.
+ """
+ if kwargs.get('add_dest', True) and args[0][0] == '-':
+ kwargs['dest'] = 'general_' + self.get_argument_name(*args, **kwargs)
+ if 'add_dest' in kwargs:
+ del kwargs['add_dest']
+
+ if 'action' in kwargs and kwargs['action'] == 'store_boolean':
+ return handle_store_boolean(self, *args, **kwargs)
+
+ self.acquire_lock()
+ self._arg_parser.add_argument(*args, **kwargs)
+
+ # Populate the shadow parser
+ if 'default' in kwargs:
+ del kwargs['default']
+ if 'action' in kwargs and kwargs['action'] == 'store_false':
+ kwargs['action'] == 'store_true'
+ self._arg_defaults.add_argument(*args, **kwargs)
+ self.release_lock()
+
+ def initialize_logging(self):
+ """Prepare the defaults for the logging infrastructure.
+ """
+ self.acquire_lock()
+ self.log_file = None
+ self.log_file_mode = 'a'
+ self.log_file_handler = None
+ self.log_print = True
+ self.log_print_to = sys.stderr
+ self.log_print_level = logging.INFO
+ self.log_file_level = logging.DEBUG
+ self.log_level = logging.INFO
+ self.log = logging.getLogger(self.__class__.__name__)
+ self.log.setLevel(logging.DEBUG)
+ logging.root.setLevel(logging.DEBUG)
+ self.release_lock()
+
+ self.add_argument('-V', '--version', version=self.version, action='version', help='Display the version and exit')
+ self.add_argument('-v', '--verbose', action='store_true', help='Make the logging more verbose')
+ self.add_argument('--datetime-fmt', default='%Y-%m-%d %H:%M:%S', help='Format string for datetimes')
+ self.add_argument('--log-fmt', default='%(levelname)s %(message)s', help='Format string for printed log output')
+ self.add_argument('--log-file-fmt', default='[%(levelname)s] [%(asctime)s] [file:%(pathname)s] [line:%(lineno)d] %(message)s', help='Format string for log file.')
+ self.add_argument('--log-file', help='File to write log messages to')
+ self.add_argument('--color', action='store_boolean', default=True, help='color in output')
+ self.add_argument('-c', '--config-file', help='The config file to read and/or write')
+ self.add_argument('--save-config', action='store_true', help='Save the running configuration to the config file')
+
+ def add_subparsers(self, title='Sub-commands', **kwargs):
+ if self._inside_context_manager:
+ raise RuntimeError('You must run this before the with statement!')
+
+ self.acquire_lock()
+ self._subparsers_default = self._arg_defaults.add_subparsers(title=title, dest='subparsers', **kwargs)
+ self._subparsers = self._arg_parser.add_subparsers(title=title, dest='subparsers', **kwargs)
+ self.release_lock()
+
+ def acquire_lock(self):
+ """Acquire the MILC lock for exclusive access to properties.
+ """
+ if self._lock:
+ self._lock.acquire()
+
+ def release_lock(self):
+ """Release the MILC lock.
+ """
+ if self._lock:
+ self._lock.release()
+
+ def find_config_file(self):
+ """Locate the config file.
+ """
+ if self.config_file:
+ return self.config_file
+
+ if self.args and self.args.general_config_file:
+ return self.args.general_config_file
+
+ return os.path.abspath(os.path.expanduser('~/.%s.ini' % self.prog_name))
+
+ def get_argument_name(self, *args, **kwargs):
+ """Takes argparse arguments and returns the dest name.
+ """
+ try:
+ return self._arg_parser._get_optional_kwargs(*args, **kwargs)['dest']
+ except ValueError:
+ return self._arg_parser._get_positional_kwargs(*args, **kwargs)['dest']
+
+ def argument(self, *args, **kwargs):
+ """Decorator to call self.add_argument or self.<subcommand>.add_argument.
+ """
+ if self._inside_context_manager:
+ raise RuntimeError('You must run this before the with statement!')
+
+ def argument_function(handler):
+ if handler is self._entrypoint:
+ self.add_argument(*args, **kwargs)
+
+ elif handler.__name__ in self.subcommands:
+ self.subcommands[handler.__name__].add_argument(*args, **kwargs)
+
+ else:
+ raise RuntimeError('Decorated function is not entrypoint or subcommand!')
+
+ return handler
+
+ return argument_function
+
+ def arg_passed(self, arg):
+ """Returns True if arg was passed on the command line.
+ """
+ return self.args_passed[arg] in (None, False)
+
+ def parse_args(self):
+ """Parse the CLI args.
+ """
+ if self.args:
+ self.log.debug('Warning: Arguments have already been parsed, ignoring duplicate attempt!')
+ return
+
+ argcomplete.autocomplete(self._arg_parser)
+
+ self.acquire_lock()
+ self.args = self._arg_parser.parse_args()
+ self.args_passed = self._arg_defaults.parse_args()
+
+ if 'entrypoint' in self.args:
+ self._entrypoint = self.args.entrypoint
+
+ if self.args.general_config_file:
+ self.config_file = self.args.general_config_file
+
+ self.release_lock()
+
+ def read_config(self):
+ """Parse the configuration file and determine the runtime configuration.
+ """
+ self.acquire_lock()
+ self.config_file = self.find_config_file()
+
+ if self.config_file and os.path.exists(self.config_file):
+ config = RawConfigParser(self.config)
+ config.read(self.config_file)
+
+ # Iterate over the config file options and write them into self.config
+ for section in config.sections():
+ for option in config.options(section):
+ value = config.get(section, option)
+
+ # Coerce values into useful datatypes
+ if value.lower() in ['1', 'yes', 'true', 'on']:
+ value = True
+ elif value.lower() in ['0', 'no', 'false', 'none', 'off']:
+ value = False
+ elif value.replace('.', '').isdigit():
+ if '.' in value:
+ value = Decimal(value)
+ else:
+ value = int(value)
+
+ self.config[section][option] = value
+
+ # Fold the CLI args into self.config
+ for argument in vars(self.args):
+ if argument in ('subparsers', 'entrypoint'):
+ continue
+
+ if '_' not in argument:
+ continue
+
+ section, option = argument.split('_', 1)
+ if hasattr(self.args_passed, argument):
+ self.config[section][option] = getattr(self.args, argument)
+ else:
+ if option not in self.config[section]:
+ self.config[section][option] = getattr(self.args, argument)
+
+ self.release_lock()
+
+ def save_config(self):
+ """Save the current configuration to the config file.
+ """
+ self.log.debug("Saving config file to '%s'", self.config_file)
+
+ if not self.config_file:
+ self.log.warning('%s.config_file file not set, not saving config!', self.__class__.__name__)
+ return
+
+ self.acquire_lock()
+
+ config = RawConfigParser()
+ for section_name, section in self.config._config.items():
+ config.add_section(section_name)
+ for option_name, value in section.items():
+ if section_name == 'general':
+ if option_name in ['save_config']:
+ continue
+ config.set(section_name, option_name, str(value))
+
+ with NamedTemporaryFile(mode='w', dir=os.path.dirname(self.config_file), delete=False) as tmpfile:
+ config.write(tmpfile)
+
+ # Move the new config file into place atomically
+ if os.path.getsize(tmpfile.name) > 0:
+ os.rename(tmpfile.name, self.config_file)
+ else:
+ self.log.warning('Config file saving failed, not replacing %s with %s.', self.config_file, tmpfile.name)
+
+ self.release_lock()
+
+ def __call__(self):
+ """Execute the entrypoint function.
+ """
+ if not self._inside_context_manager:
+ # If they didn't use the context manager use it ourselves
+ with self:
+ self.__call__()
+ return
+
+ if not self._entrypoint:
+ raise RuntimeError('No entrypoint provided!')
+
+ return self._entrypoint(self)
+
+ def entrypoint(self, description):
+ """Set the entrypoint for when no subcommand is provided.
+ """
+ if self._inside_context_manager:
+ raise RuntimeError('You must run this before cli()!')
+
+ self.acquire_lock()
+ self.description = description
+ self.release_lock()
+
+ def entrypoint_func(handler):
+ self.acquire_lock()
+ self._entrypoint = handler
+ self.release_lock()
+
+ return handler
+
+ return entrypoint_func
+
+ def add_subcommand(self, handler, description, name=None, **kwargs):
+ """Register a subcommand.
+
+ If name is not provided we use `handler.__name__`.
+ """
+ if self._inside_context_manager:
+ raise RuntimeError('You must run this before the with statement!')
+
+ if self._subparsers is None:
+ self.add_subparsers()
+
+ if not name:
+ name = handler.__name__
+
+ self.acquire_lock()
+ kwargs['help'] = description
+ self.subcommands_default[name] = self._subparsers_default.add_parser(name, **kwargs)
+ self.subcommands[name] = SubparserWrapper(self, name, self._subparsers.add_parser(name, **kwargs))
+ self.subcommands[name].set_defaults(entrypoint=handler)
+
+ if name not in self.__dict__:
+ self.__dict__[name] = self.subcommands[name]
+ else:
+ self.log.debug("Could not add subcommand '%s' to attributes, key already exists!", name)
+
+ self.release_lock()
+
+ return handler
+
+ def subcommand(self, description, **kwargs):
+ """Decorator to register a subcommand.
+ """
+
+ def subcommand_function(handler):
+ return self.add_subcommand(handler, description, **kwargs)
+
+ return subcommand_function
+
+ def setup_logging(self):
+ """Called by __enter__() to setup the logging configuration.
+ """
+ if len(logging.root.handlers) != 0:
+ # This is not a design decision. This is what I'm doing for now until I can examine and think about this situation in more detail.
+ raise RuntimeError('MILC should be the only system installing root log handlers!')
+
+ self.acquire_lock()
+
+ if self.config['general']['verbose']:
+ self.log_print_level = logging.DEBUG
+
+ self.log_file = self.config['general']['log_file'] or self.log_file
+ self.log_file_format = self.config['general']['log_file_fmt']
+ self.log_file_format = ANSIStrippingFormatter(self.config['general']['log_file_fmt'], self.config['general']['datetime_fmt'])
+ self.log_format = self.config['general']['log_fmt']
+
+ if self.config.general.color:
+ self.log_format = ANSIEmojiLoglevelFormatter(self.args.general_log_fmt, self.config.general.datetime_fmt)
+ else:
+ self.log_format = ANSIStrippingFormatter(self.args.general_log_fmt, self.config.general.datetime_fmt)
+
+ if self.log_file:
+ self.log_file_handler = logging.FileHandler(self.log_file, self.log_file_mode)
+ self.log_file_handler.setLevel(self.log_file_level)
+ self.log_file_handler.setFormatter(self.log_file_format)
+ logging.root.addHandler(self.log_file_handler)
+
+ if self.log_print:
+ self.log_print_handler = logging.StreamHandler(self.log_print_to)
+ self.log_print_handler.setLevel(self.log_print_level)
+ self.log_print_handler.setFormatter(self.log_format)
+ logging.root.addHandler(self.log_print_handler)
+
+ self.release_lock()
+
+ def __enter__(self):
+ if self._inside_context_manager:
+ self.log.debug('Warning: context manager was entered again. This usually means that self.__call__() was called before the with statement. You probably do not want to do that.')
+ return
+
+ self.acquire_lock()
+ self._inside_context_manager = True
+ self.release_lock()
+
+ colorama.init()
+ self.parse_args()
+ self.read_config()
+ self.setup_logging()
+
+ if self.config.general.save_config:
+ self.save_config()
+
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ self.acquire_lock()
+ self._inside_context_manager = False
+ self.release_lock()
+
+ if exc_type is not None and not isinstance(SystemExit(), exc_type):
+ print(exc_type)
+ logging.exception(exc_val)
+ exit(255)
+
+
+cli = MILC()
+
+if __name__ == '__main__':
+
+ @cli.argument('-c', '--comma', help='comma in output', default=True, action='store_boolean')
+ @cli.entrypoint('My useful CLI tool with subcommands.')
+ def main(cli):
+ comma = ',' if cli.config.general.comma else ''
+ cli.log.info('{bg_green}{fg_red}Hello%s World!', comma)
+
+ @cli.argument('-n', '--name', help='Name to greet', default='World')
+ @cli.subcommand('Description of hello subcommand here.')
+ def hello(cli):
+ comma = ',' if cli.config.general.comma else ''
+ cli.log.info('{fg_blue}Hello%s %s!', comma, cli.config.hello.name)
+
+ def goodbye(cli):
+ comma = ',' if cli.config.general.comma else ''
+ cli.log.info('{bg_red}Goodbye%s %s!', comma, cli.config.goodbye.name)
+
+ @cli.argument('-n', '--name', help='Name to greet', default='World')
+ @cli.subcommand('Think a bit before greeting the user.')
+ def thinking(cli):
+ comma = ',' if cli.config.general.comma else ''
+ spinner = cli.spinner(text='Just a moment...', spinner='earth')
+ spinner.start()
+ sleep(2)
+ spinner.stop()
+
+ with cli.spinner(text='Almost there!', spinner='moon'):
+ sleep(2)
+
+ cli.log.info('{fg_cyan}Hello%s %s!', comma, cli.config.thinking.name)
+
+ @cli.subcommand('Show off our ANSI colors.')
+ def pride(cli):
+ cli.echo('{bg_red} ')
+ cli.echo('{bg_lightred_ex} ')
+ cli.echo('{bg_lightyellow_ex} ')
+ cli.echo('{bg_green} ')
+ cli.echo('{bg_blue} ')
+ cli.echo('{bg_magenta} ')
+
+ # You can register subcommands using decorators as seen above, or using functions like like this:
+ cli.add_subcommand(goodbye, 'This will show up in --help output.')
+ cli.goodbye.add_argument('-n', '--name', help='Name to bid farewell to', default='World')
+
+ cli() # Automatically picks between main(), hello() and goodbye()
+ print(sorted(ansi_colors.keys()))
diff --git a/lib/python/qmk/__init__.py b/lib/python/qmk/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/python/qmk/__init__.py
diff --git a/lib/python/qmk/cli/compile/__init__.py b/lib/python/qmk/cli/compile/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/python/qmk/cli/compile/__init__.py
diff --git a/lib/python/qmk/cli/compile/json.py b/lib/python/qmk/cli/compile/json.py
new file mode 100755
index 000000000..89c16b206
--- /dev/null
+++ b/lib/python/qmk/cli/compile/json.py
@@ -0,0 +1,44 @@
+"""Create a keymap directory from a configurator export.
+"""
+import json
+import os
+import sys
+import subprocess
+
+from milc import cli
+
+import qmk.keymap
+import qmk.path
+
+
+@cli.argument('filename', help='Configurator JSON export')
+@cli.entrypoint('Compile a QMK Configurator export.')
+def main(cli):
+ """Compile a QMK Configurator export.
+
+ This command creates a new keymap from a configurator export, overwriting an existing keymap if one exists.
+
+ FIXME(skullydazed): add code to check and warn if the keymap already exists
+ """
+ # Error checking
+ if cli.args.filename == ('-'):
+ cli.log.error('Reading from STDIN is not (yet) supported.')
+ exit(1)
+ if not os.path.exists(qmk.path.normpath(cli.args.filename)):
+ cli.log.error('JSON file does not exist!')
+ exit(1)
+
+ # Parse the configurator json
+ with open(qmk.path.normpath(cli.args.filename), 'r') as fd:
+ user_keymap = json.load(fd)
+
+ # Generate the keymap
+ keymap_path = qmk.path.keymap(user_keymap['keyboard'])
+ cli.log.info('Creating {fg_cyan}%s{style_reset_all} keymap in {fg_cyan}%s', user_keymap['keymap'], keymap_path)
+ qmk.keymap.write(user_keymap['keyboard'], user_keymap['keymap'], user_keymap['layout'], user_keymap['layers'])
+ cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
+
+ # Compile the keymap
+ command = ['make', ':'.join((user_keymap['keyboard'], user_keymap['keymap']))]
+ cli.log.info('Compiling keymap with {fg_cyan}%s\n\n', ' '.join(command))
+ subprocess.run(command)
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
new file mode 100755
index 000000000..9ce765a4b
--- /dev/null
+++ b/lib/python/qmk/cli/doctor.py
@@ -0,0 +1,47 @@
+"""QMK Python Doctor
+
+Check up for QMK environment.
+"""
+import shutil
+import platform
+import os
+
+from milc import cli
+
+
+@cli.entrypoint('Basic QMK environment checks')
+def main(cli):
+ """Basic QMK environment checks.
+
+ This is currently very simple, it just checks that all the expected binaries are on your system.
+
+ TODO(unclaimed):
+ * [ ] Run the binaries to make sure they work
+ * [ ] Compile a trivial program with each compiler
+ * [ ] Check for udev entries on linux
+ """
+
+ binaries = ['dfu-programmer', 'avrdude', 'dfu-util', 'avr-gcc', 'arm-none-eabi-gcc']
+
+ cli.log.info('QMK Doctor is Checking your environment')
+
+ ok = True
+ for binary in binaries:
+ res = shutil.which(binary)
+ if res is None:
+ cli.log.error('{fg_red}QMK can\'t find ' + binary + ' in your path')
+ ok = False
+
+ OS = platform.system()
+ if OS == "Darwin":
+ cli.log.info("Detected {fg_cyan}macOS")
+ elif OS == "Linux":
+ cli.log.info("Detected {fg_cyan}linux")
+ test = 'systemctl list-unit-files | grep enabled | grep -i ModemManager'
+ if os.system(test) == 0:
+ cli.log.warn("{bg_yellow}Detected modem manager. Please disable it if you are using Pro Micros")
+ else:
+ cli.log.info("Assuming {fg_cyan}Windows")
+
+ if ok:
+ cli.log.info('{fg_green}QMK is ready to go')
diff --git a/lib/python/qmk/cli/hello.py b/lib/python/qmk/cli/hello.py
new file mode 100755
index 000000000..bc0cb6de1
--- /dev/null
+++ b/lib/python/qmk/cli/hello.py
@@ -0,0 +1,13 @@
+"""QMK Python Hello World
+
+This is an example QMK CLI script.
+"""
+from milc import cli
+
+
+@cli.argument('-n', '--name', default='World', help='Name to greet.')
+@cli.entrypoint('QMK Hello World.')
+def main(cli):
+ """Log a friendly greeting.
+ """
+ cli.log.info('Hello, %s!', cli.config.general.name)
diff --git a/lib/python/qmk/cli/json/__init__.py b/lib/python/qmk/cli/json/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/lib/python/qmk/cli/json/__init__.py
diff --git a/lib/python/qmk/cli/json/keymap.py b/lib/python/qmk/cli/json/keymap.py
new file mode 100755
index 000000000..e2d0b5809
--- /dev/null
+++ b/lib/python/qmk/cli/json/keymap.py
@@ -0,0 +1,54 @@
+"""Generate a keymap.c from a configurator export.
+"""
+import json
+import os
+import sys
+
+from milc import cli
+
+import qmk.keymap
+
+
+@cli.argument('-o', '--output', help='File to write to')
+@cli.argument('filename', help='Configurator JSON file')
+@cli.entrypoint('Create a keymap.c from a QMK Configurator export.')
+def main(cli):
+ """Generate a keymap.c from a configurator export.
+
+ This command uses the `qmk.keymap` module to generate a keymap.c from a configurator export. The generated keymap is written to stdout, or to a file if -o is provided.
+ """
+ # Error checking
+ if cli.args.filename == ('-'):
+ cli.log.error('Reading from STDIN is not (yet) supported.')
+ cli.print_usage()
+ exit(1)
+ if not os.path.exists(qmk.path.normpath(cli.args.filename)):
+ cli.log.error('JSON file does not exist!')
+ cli.print_usage()
+ exit(1)
+
+ # Environment processing
+ if cli.config.general.output == ('-'):
+ cli.config.general.output = None
+
+ # Parse the configurator json
+ with open(qmk.path.normpath(cli.args.filename), 'r') as fd:
+ user_keymap = json.load(fd)
+
+ # Generate the keymap
+ keymap_c = qmk.keymap.generate(user_keymap['keyboard'], user_keymap['layout'], user_keymap['layers'])
+
+ if cli.config.general.output:
+ output_dir = os.path.dirname(cli.config.general.output)
+
+ if not os.path.exists(output_dir):
+ os.makedirs(output_dir)
+
+ output_file = qmk.path.normpath(cli.config.general.output)
+ with open(output_file, 'w') as keymap_fd:
+ keymap_fd.write(keymap_c)
+
+ cli.log.info('Wrote keymap to %s.', cli.config.general.output)
+
+ else:
+ print(keymap_c)
diff --git a/lib/python/qmk/errors.py b/lib/python/qmk/errors.py
new file mode 100644
index 000000000..f9bf5b9af
--- /dev/null
+++ b/lib/python/qmk/errors.py
@@ -0,0 +1,6 @@
+class NoSuchKeyboardError(Exception):
+ """Raised when we can't find a keyboard/keymap directory.
+ """
+
+ def __init__(self, message):
+ self.message = message
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py
new file mode 100644
index 000000000..396b53a6f
--- /dev/null
+++ b/lib/python/qmk/keymap.py
@@ -0,0 +1,100 @@
+"""Functions that help you work with QMK keymaps.
+"""
+import json
+import logging
+import os
+from traceback import format_exc
+
+import qmk.path
+from qmk.errors import NoSuchKeyboardError
+
+# The `keymap.c` template to use when a keyboard doesn't have its own
+DEFAULT_KEYMAP_C = """#include QMK_KEYBOARD_H
+
+/* THIS FILE WAS GENERATED!
+ *
+ * This file was generated by qmk-compile-json. You may or may not want to
+ * edit it directly.
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+__KEYMAP_GOES_HERE__
+};
+"""
+
+
+def template(keyboard):
+ """Returns the `keymap.c` template for a keyboard.
+
+ If a template exists in `keyboards/<keyboard>/templates/keymap.c` that
+ text will be used instead of `DEFAULT_KEYMAP_C`.
+
+ Args:
+ keyboard
+ The keyboard to return a template for.
+ """
+ template_name = 'keyboards/%s/templates/keymap.c' % keyboard
+
+ if os.path.exists(template_name):
+ with open(template_name, 'r') as fd:
+ return fd.read()
+
+ return DEFAULT_KEYMAP_C
+
+
+def generate(keyboard, layout, layers):
+ """Returns a keymap.c for the specified keyboard, layout, and layers.
+
+ Args:
+ keyboard
+ The name of the keyboard
+
+ layout
+ The LAYOUT macro this keymap uses.
+
+ layers
+ An array of arrays describing the keymap. Each item in the inner array should be a string that is a valid QMK keycode.
+ """
+ layer_txt = []
+ for layer_num, layer in enumerate(layers):
+ if layer_num != 0:
+ layer_txt[-1] = layer_txt[-1] + ','
+ layer_keys = ', '.join(layer)
+ layer_txt.append('\t[%s] = %s(%s)' % (layer_num, layout, layer_keys))
+
+ keymap = '\n'.join(layer_txt)
+ keymap_c = template(keyboard)
+
+ return keymap_c.replace('__KEYMAP_GOES_HERE__', keymap)
+
+
+def write(keyboard, keymap, layout, layers):
+ """Generate the `keymap.c` and write it to disk.
+
+ Returns the filename written to.
+
+ Args:
+ keyboard
+ The name of the keyboard
+
+ keymap
+ The name of the keymap
+
+ layout
+ The LAYOUT macro this keymap uses.
+
+ layers
+ An array of arrays describing the keymap. Each item in the inner array should be a string that is a valid QMK keycode.
+ """
+ keymap_c = generate(keyboard, layout, layers)
+ keymap_path = qmk.path.keymap(keyboard)
+ keymap_dir = os.path.join(keymap_path, keymap)
+ keymap_file = os.path.join(keymap_dir, 'keymap.c')
+
+ if not os.path.exists(keymap_dir):
+ os.makedirs(keymap_dir)
+
+ with open(keymap_file, 'w') as keymap_fd:
+ keymap_fd.write(keymap_c)
+
+ return keymap_file
diff --git a/lib/python/qmk/path.py b/lib/python/qmk/path.py
new file mode 100644
index 000000000..f2a8346a5
--- /dev/null
+++ b/lib/python/qmk/path.py
@@ -0,0 +1,32 @@
+"""Functions that help us work with files and folders.
+"""
+import os
+
+
+def keymap(keyboard):
+ """Locate the correct directory for storing a keymap.
+
+ Args:
+ keyboard
+ The name of the keyboard. Example: clueboard/66/rev3
+ """
+ for directory in ['.', '..', '../..', '../../..', '../../../..', '../../../../..']:
+ basepath = os.path.normpath(os.path.join('keyboards', keyboard, directory, 'keymaps'))
+
+ if os.path.exists(basepath):
+ return basepath
+
+ logging.error('Could not find keymaps directory!')
+ raise NoSuchKeyboardError('Could not find keymaps directory for: %s' % keyboard)
+
+
+def normpath(path):
+ """Returns the fully resolved absolute path to a file.
+
+ This function will return the absolute path to a file as seen from the
+ directory the script was called from.
+ """
+ if path and path[0] == '/':
+ return os.path.normpath(path)
+
+ return os.path.normpath(os.path.join(os.environ['ORIG_CWD'], path))
diff --git a/message.mk b/message.mk
index 734de8645..ec9bacbf4 100644
--- a/message.mk
+++ b/message.mk
@@ -79,8 +79,8 @@ MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR)
MSG_CHECK_FILESIZE = Checking file size of $(TARGET).hex
MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) bytes over)\n
MSG_FILE_TOO_SMALL = The firmware is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n
-MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(FREE_SIZE) bytes free)\n
-MSG_FILE_NEAR_LIMIT = The firmware size is approaching the maximum - $(CURRENT_SIZE)/$(MAX_SIZE) ($(FREE_SIZE) bytes free)\n
+MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
+MSG_FILE_NEAR_LIMIT = The firmware size is approaching the maximum - $(CURRENT_SIZE)/$(MAX_SIZE) ($(PERCENT_SIZE)%%, $(FREE_SIZE) bytes free)\n
MSG_PYTHON_MISSING = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
Python 3 is not installed. It will be required by a future version\n\
of qmk_firmware.\n\n\
diff --git a/quantum/debounce/eager_pk.c b/quantum/debounce/eager_pk.c
index aa0f63a9d..c07be18f8 100644
--- a/quantum/debounce/eager_pk.c
+++ b/quantum/debounce/eager_pk.c
@@ -39,6 +39,7 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred.
static debounce_counter_t *debounce_counters;
static bool counters_need_update;
+static bool matrix_need_update;
#define DEBOUNCE_ELAPSED 251
#define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1)
@@ -63,7 +64,7 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool
update_debounce_counters(num_rows, current_time);
}
- if (changed) {
+ if (changed || matrix_need_update) {
transfer_matrix_values(raw, cooked, num_rows, current_time);
}
}
@@ -88,16 +89,21 @@ void update_debounce_counters(uint8_t num_rows, uint8_t current_time) {
// upload from raw_matrix to final matrix;
void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) {
+ matrix_need_update = false;
debounce_counter_t *debounce_pointer = debounce_counters;
for (uint8_t row = 0; row < num_rows; row++) {
matrix_row_t delta = raw[row] ^ cooked[row];
matrix_row_t existing_row = cooked[row];
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
matrix_row_t col_mask = (ROW_SHIFTER << col);
- if ((delta & col_mask) && *debounce_pointer == DEBOUNCE_ELAPSED) {
- *debounce_pointer = current_time;
- counters_need_update = true;
- existing_row ^= col_mask; // flip the bit.
+ if (delta & col_mask) {
+ if (*debounce_pointer == DEBOUNCE_ELAPSED) {
+ *debounce_pointer = current_time;
+ counters_need_update = true;
+ existing_row ^= col_mask; // flip the bit.
+ } else {
+ matrix_need_update = true;
+ }
}
debounce_pointer++;
}
diff --git a/quantum/debounce/eager_pr.c b/quantum/debounce/eager_pr.c
index 26b17ed29..8dbfa3fcf 100644
--- a/quantum/debounce/eager_pr.c
+++ b/quantum/debounce/eager_pr.c
@@ -28,6 +28,7 @@ No further inputs are accepted until DEBOUNCE milliseconds have occurred.
#endif
#define debounce_counter_t uint8_t
+static bool matrix_need_update;
static debounce_counter_t *debounce_counters;
static bool counters_need_update;
@@ -53,7 +54,7 @@ void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool
update_debounce_counters(num_rows, current_time);
}
- if (changed || (needed_update && !counters_need_update)) {
+ if (changed || (needed_update && !counters_need_update) || matrix_need_update) {
transfer_matrix_values(raw, cooked, num_rows, current_time);
}
}
@@ -76,18 +77,22 @@ void update_debounce_counters(uint8_t num_rows, uint8_t current_time) {
// upload from raw_matrix to final matrix;
void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time) {
+ matrix_need_update = false;
debounce_counter_t *debounce_pointer = debounce_counters;
for (uint8_t row = 0; row < num_rows; row++) {
matrix_row_t existing_row = cooked[row];
matrix_row_t raw_row = raw[row];
// determine new value basd on debounce pointer + raw value
- if (*debounce_pointer == DEBOUNCE_ELAPSED && (existing_row != raw_row)) {
- *debounce_pointer = current_time;
- cooked[row] = raw_row;
- counters_need_update = true;
+ if (existing_row != raw_row) {
+ if (*debounce_pointer == DEBOUNCE_ELAPSED) {
+ *debounce_pointer = current_time;
+ cooked[row] = raw_row;
+ counters_need_update = true;
+ } else {
+ matrix_need_update = true;
+ }
}
-
debounce_pointer++;
}
}
diff --git a/quantum/encoder.c b/quantum/encoder.c
index ddf6234ab..31f00c346 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -25,16 +25,14 @@
#define ENCODER_RESOLUTION 4
#endif
-#ifndef NUMBER_OF_ENCODERS
- #error "Number of encoders not defined by NUMBER_OF_ENCODERS"
-#endif
-
#if !defined(ENCODERS_PAD_A) || !defined(ENCODERS_PAD_B)
#error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B"
#endif
-static pin_t encoders_pad_a[NUMBER_OF_ENCODERS] = ENCODERS_PAD_A;
-static pin_t encoders_pad_b[NUMBER_OF_ENCODERS] = ENCODERS_PAD_B;
+
+#define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a)/sizeof(pin_t))
+static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
+static pin_t encoders_pad_b[] = ENCODERS_PAD_B;
static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 };
diff --git a/quantum/keymap_extras/sendstring_belgian.h b/quantum/keymap_extras/sendstring_belgian.h
index 77531a14a..f07d85272 100644
--- a/quantum/keymap_extras/sendstring_belgian.h
+++ b/quantum/keymap_extras/sendstring_belgian.h
@@ -13,13 +13,14 @@
* 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
+
+// Sendstring lookup tables for Belgian layouts
+
+#pragma once
#include "keymap_belgian.h"
-const bool ascii_to_shift_lut[0x80] PROGMEM = {
+const bool ascii_to_shift_lut[128] 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,
@@ -38,7 +39,8 @@ const bool ascii_to_shift_lut[0x80] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
-const bool ascii_to_altgr_lut[0x80] PROGMEM = {
+
+const bool ascii_to_altgr_lut[128] 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,
@@ -58,37 +60,38 @@ const bool ascii_to_altgr_lut[0x80] PROGMEM = {
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
-};
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-#endif
+ // ! " # $ % & '
+ 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 { | } ~ DEL
+ KC_X, KC_Y, BE_Z, BE_CCED, BE_AMP, BE_AGRV, BE_EQL, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_bepo.h b/quantum/keymap_extras/sendstring_bepo.h
index c7377e077..565c55b95 100644
--- a/quantum/keymap_extras/sendstring_bepo.h
+++ b/quantum/keymap_extras/sendstring_bepo.h
@@ -13,29 +13,85 @@
* 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 bépo layout */
-#ifndef SENDSTRING_BEPO
-#define SENDSTRING_BEPO
+
+// Sendstring lookup tables for BÉPO layouts
+
+#pragma once
#include "keymap_bepo.h"
-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,
- KC_SPC, BP_DCRC, BP_DQOT, BP_DOLLAR, BP_DOLLAR, BP_PERCENT, BP_P, BP_APOS,
- BP_LPRN, BP_RPRN, BP_ASTR, BP_PLUS, BP_COMM, BP_MINUS, BP_DOT, BP_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, BP_DOT, BP_DOT, KC_2, BP_EQUAL, KC_2, BP_APOS,
- BP_AT, BP_A, BP_B, BP_C, BP_D, BP_E, BP_F, BP_G,
- BP_H, BP_I, BP_J, BP_K, BP_L, BP_M, BP_N, BP_O,
- BP_P, BP_Q, BP_R, BP_S, BP_T, BP_U, BP_V, BP_W,
- BP_X, BP_Y, BP_Z, KC_4, BP_AGRV, KC_5, KC_5, KC_MINS,
- KC_2, BP_A, BP_B, BP_C, BP_D, BP_E, BP_F, BP_G,
- BP_H, BP_I, BP_J, BP_K, BP_L, BP_M, BP_N, BP_O,
- BP_P, BP_Q, BP_R, BP_S, BP_T, BP_U, BP_V, BP_W,
- BP_X, BP_Y, BP_Z, BP_Y, BP_B, BP_X, BP_K, KC_DEL,
+const bool ascii_to_shift_lut[128] 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, 1, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 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, 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
+};
+
+const bool ascii_to_altgr_lut[128] 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, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 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, 0, 0, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 0
};
-#endif
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, BP_DCRC, BP_DQOT, BP_DLR, BP_DLR, BP_PERC, BP_P, BP_APOS,
+ // ( ) * + , - . /
+ BP_LPRN, BP_RPRN, BP_ASTR, BP_PLUS, BP_COMM, BP_MINS, BP_DOT, BP_SLSH,
+ // 0 1 2 3 4 5 6 7
+ BP_ASTR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_AT, BP_PLUS,
+ // 8 9 : ; < = > ?
+ BP_MINS, BP_SLSH, BP_DOT, BP_COMM, BP_LGIL, BP_EQL, BP_RGIL, BP_APOS,
+ // @ A B C D E F G
+ BP_AT, BP_A, BP_B, BP_C, BP_D, BP_E, BP_F, BP_G,
+ // H I J K L M N O
+ BP_H, BP_I, BP_J, BP_K, BP_L, BP_M, BP_N, BP_O,
+ // P Q R S T U V W
+ BP_P, BP_Q, BP_R, BP_S, BP_T, BP_U, BP_V, BP_W,
+ // X Y Z [ \ ] ^ _
+ BP_X, BP_Y, BP_Z, BP_LPRN, BP_AGRV, BP_RPRN, BP_AT, KC_SPC,
+ // ` a b c d e f g
+ BP_PERC, BP_A, BP_B, BP_C, BP_D, BP_E, BP_F, BP_G,
+ // h i j k l m n o
+ BP_H, BP_I, BP_J, BP_K, BP_L, BP_M, BP_N, BP_O,
+ // p q r s t u v w
+ BP_P, BP_Q, BP_R, BP_S, BP_T, BP_U, BP_V, BP_W,
+ // x y z { | } ~ DEL
+ BP_X, BP_Y, BP_Z, BP_Y, BP_B, BP_X, BP_K, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_colemak.h b/quantum/keymap_extras/sendstring_colemak.h
index fa9ace929..331f6c222 100644
--- a/quantum/keymap_extras/sendstring_colemak.h
+++ b/quantum/keymap_extras/sendstring_colemak.h
@@ -13,29 +13,45 @@
* 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 Colemak layout */
-#ifndef SENDSTRING_COLEMAK
-#define SENDSTRING_COLEMAK
+
+// Sendstring lookup tables for Colemak layouts
+
+#pragma once
#include "keymap_colemak.h"
-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,
- KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
- KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, CM_SCLN, CM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
- KC_2, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
- CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
- CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
- CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
- KC_GRV, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
- CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
- CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
- CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
-};
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-#endif
+ // ! " # $ % & '
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
+ // ( ) * + , - . /
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, CM_SCLN, CM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
+ // @ A B C D E F G
+ KC_2, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
+ // H I J K L M N O
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
+ // P Q R S T U V W
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
+ // X Y Z [ \ ] ^ _
+ CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
+ // ` a b c d e f g
+ KC_GRV, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
+ // h i j k l m n o
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
+ // p q r s t u v w
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
+ // x y z { | } ~ DEL
+ CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_dvorak.h b/quantum/keymap_extras/sendstring_dvorak.h
index f5c5c818b..f2cb6c4a0 100644
--- a/quantum/keymap_extras/sendstring_dvorak.h
+++ b/quantum/keymap_extras/sendstring_dvorak.h
@@ -13,29 +13,45 @@
* 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 Dvorak layout */
-#ifndef SENDSTRING_DVORAK
-#define SENDSTRING_DVORAK
+
+// Sendstring lookup tables for Dvorak layouts
+
+#pragma once
#include "keymap_dvorak.h"
-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,
- KC_SPC, DV_1, DV_QUOT, DV_3, DV_4, DV_5, DV_7, DV_QUOT,
- DV_9, DV_0, DV_8, DV_EQL, DV_COMM, DV_MINS, DV_DOT, DV_SLSH,
- DV_0, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_7,
- DV_8, DV_9, DV_SCLN, DV_SCLN, DV_COMM, DV_EQL, DV_DOT, DV_SLSH,
- DV_2, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
- DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
- DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
- DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_6, DV_MINS,
- DV_GRV, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
- DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
- DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
- DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_GRV, KC_DEL
-};
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-#endif
+ // ! " # $ % & '
+ KC_SPC, DV_1, DV_QUOT, DV_3, DV_4, DV_5, DV_7, DV_QUOT,
+ // ( ) * + , - . /
+ DV_9, DV_0, DV_8, DV_EQL, DV_COMM, DV_MINS, DV_DOT, DV_SLSH,
+ // 0 1 2 3 4 5 6 7
+ DV_0, DV_1, DV_2, DV_3, DV_4, DV_5, DV_6, DV_7,
+ // 8 9 : ; < = > ?
+ DV_8, DV_9, DV_SCLN, DV_SCLN, DV_COMM, DV_EQL, DV_DOT, DV_SLSH,
+ // @ A B C D E F G
+ DV_2, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
+ // H I J K L M N O
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
+ // P Q R S T U V W
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
+ // X Y Z [ \ ] ^ _
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_6, DV_MINS,
+ // ` a b c d e f g
+ DV_GRV, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F, DV_G,
+ // h i j k l m n o
+ DV_H, DV_I, DV_J, DV_K, DV_L, DV_M, DV_N, DV_O,
+ // p q r s t u v w
+ DV_P, DV_Q, DV_R, DV_S, DV_T, DV_U, DV_V, DV_W,
+ // x y z { | } ~ DEL
+ DV_X, DV_Y, DV_Z, DV_LBRC, DV_BSLS, DV_RBRC, DV_GRV, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_french.h b/quantum/keymap_extras/sendstring_french.h
new file mode 100644
index 000000000..66b53fbfd
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_french.h
@@ -0,0 +1,97 @@
+/* Copyright 2016 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/>.
+ */
+
+// Sendstring lookup tables for French (AZERTY) layouts
+
+#pragma once
+
+#include "keymap_french.h"
+
+const bool ascii_to_shift_lut[128] 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, 0, 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, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 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[128] 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
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, FR_EXLM, FR_QUOT, FR_QUOT, FR_DLR, FR_UGRV, FR_AMP, FR_APOS,
+ // ( ) * + , - . /
+ FR_LPRN, FR_RPRN, FR_ASTR, FR_EQL, FR_COMM, FR_MINS, FR_SCLN, FR_COLN,
+ // 0 1 2 3 4 5 6 7
+ FR_AGRV, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, FR_MINS, FR_EGRV,
+ // 8 9 : ; < = > ?
+ FR_CCED, FR_AGRV, FR_COLN, FR_SCLN, FR_LESS, FR_EQL, FR_LESS, FR_COMM,
+ // @ A B C D E F G
+ FR_AGRV, FR_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, FR_M, KC_N, KC_O,
+ // P Q R S T U V W
+ KC_P, FR_Q, KC_R, KC_S, KC_T, KC_U, KC_V, FR_W,
+ // X Y Z [ \ ] ^ _
+ KC_X, KC_Y, FR_Z, FR_LPRN, FR_UNDS, FR_RPRN, FR_CCED, FR_UNDS,
+ // ` a b c d e f g
+ FR_EGRV, FR_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, FR_M, KC_N, KC_O,
+ // p q r s t u v w
+ KC_P, FR_Q, KC_R, KC_S, KC_T, KC_U, KC_V, FR_W,
+ // x y z { | } ~ DEL
+ KC_X, KC_Y, FR_Z, FR_APOS, FR_MINS, FR_EQL, FR_EACU, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_german.h b/quantum/keymap_extras/sendstring_german.h
index f20fab77d..61d224824 100644
--- a/quantum/keymap_extras/sendstring_german.h
+++ b/quantum/keymap_extras/sendstring_german.h
@@ -13,69 +13,85 @@
* 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 German layout */
-#ifndef SENDSTRING_GERMAN
-#define SENDSTRING_GERMAN
+
+// Sendstring lookup tables for German layouts
+
+#pragma once
#include "keymap_german.h"
-const bool ascii_to_shift_lut[0x80] PROGMEM = {
+const bool ascii_to_shift_lut[128] 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, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 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,
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
+ 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Until an ALT table/functionality is added, the following symbols will not work:
-* § @ [ ] { } \ ~ äA öÖ ß ´
-* Following characters can be printed using other characters like so:
-* [ in makro will be ü
-* { in makro will be Ü
-* ~ in makro will be °
-*/
-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,
+const bool ascii_to_altgr_lut[128] 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,
- /* SPACE ! " # $ % & ' */
- KC_SPC, KC_1, KC_2, DE_HASH, KC_4, KC_5, KC_6, DE_HASH,
- /* ( ) * + , - . / */
- KC_8, KC_9, DE_PLUS, DE_PLUS, KC_COMM, DE_MINS, KC_DOT, KC_7,
- /* 0 1 2 3 4 5 6 7 */
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- /* 8 9 : ; < = > ? */
- KC_8, KC_9, KC_DOT, KC_COMM, DE_LESS, KC_0, DE_LESS, KC_MINS,
- /* @ A B C D E F G */
- KC_2, KC_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, KC_M, KC_N, KC_O,
- /* P Q R S T U V W */
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- /* X Y Z [ \ ] ^ _ */
- KC_X, DE_Y, DE_Z, KC_LBRC, KC_BSLS, KC_RBRC, DE_CIRC, DE_MINS,
- /* ` a b c d e f g */
- DE_ACUT, KC_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, KC_M, KC_N, KC_O,
- /* p q r s t u v w */
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- /* x y z { | } ~ DELETE */
- KC_X, DE_Y, DE_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 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, 0, 0,
+ 0, 0, 0, 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
};
-#endif
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, DE_1, DE_2, DE_HASH, DE_4, DE_5, DE_6, DE_HASH,
+ // ( ) * + , - . /
+ DE_8, DE_9, DE_PLUS, DE_PLUS, DE_COMM, DE_MINS, DE_DOT, DE_7,
+ // 0 1 2 3 4 5 6 7
+ DE_0, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7,
+ // 8 9 : ; < = > ?
+ DE_8, DE_9, DE_DOT, DE_COMM, DE_LESS, DE_0, DE_LESS, DE_SS,
+ // @ A B C D E F G
+ DE_Q, DE_A, DE_B, DE_C, DE_D, DE_E, DE_F, DE_G,
+ // H I J K L M N O
+ DE_H, DE_I, DE_J, DE_K, DE_L, DE_M, DE_N, DE_O,
+ // P Q R S T U V W
+ DE_P, DE_Q, DE_R, DE_S, DE_T, DE_U, DE_V, DE_W,
+ // X Y Z [ \ ] ^ _
+ DE_X, DE_Y, DE_Z, DE_8, DE_SS, DE_9, DE_CIRC, DE_MINS,
+ // ` a b c d e f g
+ DE_ACUT, DE_A, DE_B, DE_C, DE_D, DE_E, DE_F, DE_G,
+ // h i j k l m n o
+ DE_H, DE_I, DE_J, DE_K, DE_L, DE_M, DE_N, DE_O,
+ // p q r s t u v w
+ DE_P, DE_Q, DE_R, DE_S, DE_T, DE_U, DE_V, DE_W,
+ // x y z { | } ~ DEL
+ DE_X, DE_Y, DE_Z, DE_7, DE_LESS, DE_0, DE_PLUS, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_jis.h b/quantum/keymap_extras/sendstring_jis.h
index c5a38c6a5..fe42445f4 100644
--- a/quantum/keymap_extras/sendstring_jis.h
+++ b/quantum/keymap_extras/sendstring_jis.h
@@ -13,15 +13,19 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* Sendstring definitions for the JIS keyboard layout */
-#ifndef SENDSTRING_JIS
-#define SENDSTRING_JIS
-const bool ascii_to_shift_lut[0x80] PROGMEM = {
+// Sendstring lookup tables for JIS layouts
+
+#pragma once
+
+#include "keymap_jp.h"
+
+const bool ascii_to_shift_lut[128] 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, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -36,23 +40,38 @@ const bool ascii_to_shift_lut[0x80] PROGMEM = {
0, 0, 0, 1, 1, 1, 1, 0
};
-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,
- KC_SPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, KC_QUOT, KC_SCLN, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, KC_QUOT, KC_SCLN, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_LBRC, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_RBRC, KC_JYEN, KC_BSLS, KC_EQL, KC_RO,
- KC_LBRC, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_RBRC, KC_JYEN, KC_BSLS, KC_EQL, KC_DEL,
-};
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-#endif
+ // ! " # $ % & '
+ KC_SPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // ( ) * + , - . /
+ KC_8, KC_9, JP_COLN, JP_SCLN, JP_COMM, JP_MINS, JP_DOT, JP_SLSH,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, JP_COLN, JP_SCLN, JP_COMM, JP_MINS, JP_DOT, JP_SLSH,
+ // @ A B C D E F G
+ JP_AT, KC_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, KC_M, KC_N, KC_O,
+ // P Q R S T U V W
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // X Y Z [ \ ] ^ _
+ KC_X, KC_Y, KC_Z, JP_LBRC, JP_BSLS, JP_RBRC, JP_CIRC, JP_BSLS,
+ // ` a b c d e f g
+ JP_AT, KC_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, KC_M, KC_N, KC_O,
+ // p q r s t u v w
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // x y z { | } ~ DEL
+ KC_X, KC_Y, KC_Z, JP_LBRC, JP_YEN, JP_RBRC, JP_CIRC, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_norman.h b/quantum/keymap_extras/sendstring_norman.h
index 57d450ca8..8d4ec8dab 100644
--- a/quantum/keymap_extras/sendstring_norman.h
+++ b/quantum/keymap_extras/sendstring_norman.h
@@ -13,27 +13,45 @@
* 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 Colemak layout */
+
+// Sendstring lookup tables for Norman layouts
+
#pragma once
#include "keymap_norman.h"
-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,
- KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
- KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, NM_SCLN, NM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
- KC_2, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G,
- NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
- NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
- NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
- KC_GRV, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G,
- NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
- NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
- NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
-};
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // ! " # $ % & '
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
+ // ( ) * + , - . /
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, NM_SCLN, NM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
+ // @ A B C D E F G
+ KC_2, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G,
+ // H I J K L M N O
+ NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
+ // P Q R S T U V W
+ NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
+ // X Y Z [ \ ] ^ _
+ NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
+ // ` a b c d e f g
+ KC_GRV, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G,
+ // h i j k l m n o
+ NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O,
+ // p q r s t u v w
+ NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W,
+ // x y z { | } ~ DEL
+ NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_spanish.h b/quantum/keymap_extras/sendstring_spanish.h
index 719445929..985d60288 100644
--- a/quantum/keymap_extras/sendstring_spanish.h
+++ b/quantum/keymap_extras/sendstring_spanish.h
@@ -13,59 +13,85 @@
* 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 Spanish layout */
-#ifndef SENDSTRING_SPANISH
-#define SENDSTRING_SPANISH
+
+// Sendstring lookup tables for Spanish layouts
+
+#pragma once
#include "keymap_spanish.h"
-const bool ascii_to_shift_lut[0x80] PROGMEM = {
+const bool ascii_to_shift_lut[128] 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, 1, 1, 1, 1, 1, 1, 0,
+ 0, 1, 1, 0, 1, 1, 1, 0,
1, 1, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0,
-
0, 0, 1, 1, 0, 1, 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, 1, 1, 1, 1, 1,
-
1, 1, 1, 0, 0, 0, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0
+ 0, 0, 0, 0, 0, 0, 0, 0
};
-/* Until an ALT table/functionality is added, the following symbols will not work:
- # @ [ ] { } | ~
-*/
-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,
-/* , ! " # $ % & ' */
- KC_SPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, ES_APOS,
-/* ( ) * + , - . / */
- KC_8, KC_9, ES_PLUS, ES_PLUS, KC_COMM, ES_MINS, KC_DOT, KC_7,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
-/* 8 9 : ; < = > ? */
- KC_8, KC_9, KC_DOT, KC_COMM, KC_NUBS, KC_0, KC_NUBS, ES_APOS,
-/* @ A B C D E F G */
- KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
-/* X Y Z [ \ ] ^ _ */
- KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, ES_GRV, ES_MINS,
- ES_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+const bool ascii_to_altgr_lut[128] 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, 0, 0,
+ 0, 0, 0, 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
};
-#endif
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, ES_APOS,
+ // ( ) * + , - . /
+ KC_8, KC_9, ES_PLUS, ES_PLUS, KC_COMM, ES_MINS, KC_DOT, KC_7,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, KC_DOT, KC_COMM, ES_LESS, KC_0, ES_LESS, ES_APOS,
+ // @ A B C D E F G
+ KC_2, KC_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, KC_M, KC_N, KC_O,
+ // P Q R S T U V W
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // X Y Z [ \ ] ^ _
+ KC_X, KC_Y, KC_Z, ES_GRV, ES_OVRR, ES_PLUS, ES_GRV, ES_MINS,
+ // ` a b c d e f g
+ ES_GRV, KC_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, KC_M, KC_N, KC_O,
+ // p q r s t u v w
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // x y z { | } ~ DEL
+ KC_X, KC_Y, KC_Z, ES_ACUT, KC_1, ES_CCED, ES_NTIL, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_uk.h b/quantum/keymap_extras/sendstring_uk.h
index 2824e5d44..a01c9bc43 100644
--- a/quantum/keymap_extras/sendstring_uk.h
+++ b/quantum/keymap_extras/sendstring_uk.h
@@ -14,12 +14,13 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* SEND_STRING() LUTs for UK layouts */
+// Sendstring lookup tables for UK layouts
-#ifndef SENDSTRING_UK
-#define SENDSTRING_UK
+#pragma once
-const bool ascii_to_shift_lut[0x80] PROGMEM = {
+#include "keymap_uk.h"
+
+const bool ascii_to_shift_lut[128] 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,
@@ -39,24 +40,38 @@ const bool ascii_to_shift_lut[0x80] PROGMEM = {
0, 0, 0, 1, 1, 1, 1, 0
};
-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,
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- KC_SPC, KC_1, KC_2, KC_NUHS, KC_4, KC_5, KC_7, KC_QUOT,
- KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
- KC_QUOT, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
- KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+ // ! " # $ % & '
+ UK_SPC, UK_1, UK_2, UK_HASH, UK_4, UK_5, UK_7, UK_QUOT,
+ // ( ) * + , - . /
+ UK_9, UK_0, UK_8, UK_EQL, UK_COMM, UK_MINS, UK_DOT, UK_SLSH,
+ // 0 1 2 3 4 5 6 7
+ UK_0, UK_1, UK_2, UK_3, UK_4, UK_5, UK_6, UK_7,
+ // 8 9 : ; < = > ?
+ UK_8, UK_9, UK_SCLN, UK_SCLN, UK_COMM, UK_EQL, UK_DOT, UK_SLSH,
+ // @ A B C D E F G
+ UK_QUOT, UK_A, UK_B, UK_C, UK_D, UK_E, UK_F, UK_G,
+ // H I J K L M N O
+ UK_H, UK_I, UK_J, UK_K, UK_L, UK_M, UK_N, UK_O,
+ // P Q R S T U V W
+ UK_P, UK_Q, UK_R, UK_S, UK_T, UK_U, UK_V, UK_W,
+ // X Y Z [ \ ] ^ _
+ UK_X, UK_Y, UK_Z, UK_LBRC, UK_BSLS, UK_RBRC, UK_6, UK_MINS,
+ // ` a b c d e f g
+ UK_GRV, UK_A, UK_B, UK_C, UK_D, UK_E, UK_F, UK_G,
+ // h i j k l m n o
+ UK_H, UK_I, UK_J, UK_K, UK_L, UK_M, UK_N, UK_O,
+ // p q r s t u v w
+ UK_P, UK_Q, UK_R, UK_S, UK_T, UK_U, UK_V, UK_W,
+ // x y z { | } ~ DEL
+ UK_X, UK_Y, UK_Z, UK_LBRC, UK_BSLS, UK_RBRC, UK_HASH, KC_DEL
};
-
-#endif
diff --git a/quantum/keymap_extras/sendstring_workman.h b/quantum/keymap_extras/sendstring_workman.h
index a8571839d..a0dd4756f 100644
--- a/quantum/keymap_extras/sendstring_workman.h
+++ b/quantum/keymap_extras/sendstring_workman.h
@@ -13,29 +13,45 @@
* 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 Workman layout */
-#ifndef SENDSTRING_WORKMAN
-#define SENDSTRING_WORKMAN
+
+// Sendstring lookup tables for Workman layouts
+
+#pragma once
#include "keymap_workman.h"
-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,
- KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
- KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
- KC_2, WK_A, WK_B, WK_C, WK_D, WK_E, WK_F, WK_G,
- WK_H, WK_I, WK_J, WK_K, WK_L, WK_M, WK_N, WK_O,
- WK_P, WK_Q, WK_R, WK_S, WK_T, WK_U, WK_V, WK_W,
- WK_X, WK_Y, WK_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
- KC_GRV, WK_A, WK_B, WK_C, WK_D, WK_E, WK_F, WK_G,
- WK_H, WK_I, WK_J, WK_K, WK_L, WK_M, WK_N, WK_O,
- WK_P, WK_Q, WK_R, WK_S, WK_T, WK_U, WK_V, WK_W,
- WK_X, WK_Y, WK_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
-};
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-#endif \ No newline at end of file
+ // ! " # $ % & '
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
+ // ( ) * + , - . /
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
+ // @ A B C D E F G
+ KC_2, WK_A, WK_B, WK_C, WK_D, WK_E, WK_F, WK_G,
+ // H I J K L M N O
+ WK_H, WK_I, WK_J, WK_K, WK_L, WK_M, WK_N, WK_O,
+ // P Q R S T U V W
+ WK_P, WK_Q, WK_R, WK_S, WK_T, WK_U, WK_V, WK_W,
+ // X Y Z [ \ ] ^ _
+ WK_X, WK_Y, WK_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
+ // ` a b c d e f g
+ KC_GRV, WK_A, WK_B, WK_C, WK_D, WK_E, WK_F, WK_G,
+ // h i j k l m n o
+ WK_H, WK_I, WK_J, WK_K, WK_L, WK_M, WK_N, WK_O,
+ // p q r s t u v w
+ WK_P, WK_Q, WK_R, WK_S, WK_T, WK_U, WK_V, WK_W,
+ // x y z { | } ~ DEL
+ WK_X, WK_Y, WK_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+};
diff --git a/quantum/matrix.c b/quantum/matrix.c
index e222a3097..7ccac3533 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -183,7 +183,7 @@ static void unselect_row(uint8_t row)
static void unselect_rows(void)
{
for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
- setPinInput(row_pins[x]);
+ setPinInputHigh(row_pins[x]);
}
}
diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c
index 2c6c9d0d5..d3c3b1673 100644
--- a/quantum/process_keycode/process_combo.c
+++ b/quantum/process_keycode/process_combo.c
@@ -28,6 +28,7 @@ static uint16_t timer = 0;
static uint8_t current_combo_index = 0;
static bool drop_buffer = false;
static bool is_active = false;
+static bool b_combo_enable = true; // defaults to enabled
static uint8_t buffer_size = 0;
#ifdef COMBO_ALLOW_ACTION_KEYS
@@ -128,6 +129,23 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) {
drop_buffer = false;
bool no_combo_keys_pressed = true;
+ if (keycode == CMB_ON && record->event.pressed) {
+ combo_enable();
+ return true;
+ }
+
+ if (keycode == CMB_OFF && record->event.pressed) {
+ combo_disable();
+ return true;
+ }
+
+ if (keycode == CMB_TOG && record->event.pressed) {
+ combo_toggle();
+ return true;
+ }
+
+ if (!is_combo_enabled()) { return true; }
+
for (current_combo_index = 0; current_combo_index < COMBO_COUNT;
++current_combo_index) {
combo_t *combo = &key_combos[current_combo_index];
@@ -166,7 +184,7 @@ bool process_combo(uint16_t keycode, keyrecord_t *record) {
}
void matrix_scan_combo(void) {
- if (is_active && timer && timer_elapsed(timer) > COMBO_TERM) {
+ if (b_combo_enable && is_active && timer && timer_elapsed(timer) > COMBO_TERM) {
/* This disables the combo, meaning key events for this
* combo will be handled by the next processors in the chain
@@ -175,3 +193,26 @@ void matrix_scan_combo(void) {
dump_key_buffer(true);
}
}
+
+void combo_enable(void) {
+ b_combo_enable = true;
+}
+
+void combo_disable(void) {
+ b_combo_enable = is_active = false;
+ timer = 0;
+ dump_key_buffer(true);
+
+}
+
+void combo_toggle(void) {
+ if (b_combo_enable) {
+ combo_disable();
+ } else {
+ combo_enable();
+ }
+}
+
+bool is_combo_enabled(void) {
+ return b_combo_enable;
+}
diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h
index f06d2d345..aab284957 100644
--- a/quantum/process_keycode/process_combo.h
+++ b/quantum/process_keycode/process_combo.h
@@ -58,4 +58,9 @@ bool process_combo(uint16_t keycode, keyrecord_t *record);
void matrix_scan_combo(void);
void process_combo_event(uint8_t combo_index, bool pressed);
+void combo_enable(void);
+void combo_disable(void);
+void combo_toggle(void);
+bool is_combo_enabled(void);
+
#endif
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c
index 897e9eabf..f787e6b01 100644
--- a/quantum/process_keycode/process_leader.c
+++ b/quantum/process_keycode/process_leader.c
@@ -17,6 +17,7 @@
#ifdef LEADER_ENABLE
#include "process_leader.h"
+#include <string.h>
#ifndef LEADER_TIMEOUT
#define LEADER_TIMEOUT 300
@@ -41,11 +42,7 @@ void qk_leader_start(void) {
leading = true;
leader_time = timer_read();
leader_sequence_size = 0;
- leader_sequence[0] = 0;
- leader_sequence[1] = 0;
- leader_sequence[2] = 0;
- leader_sequence[3] = 0;
- leader_sequence[4] = 0;
+ memset(leader_sequence, 0, sizeof(leader_sequence));
}
bool process_leader(uint16_t keycode, keyrecord_t *record) {
@@ -58,8 +55,13 @@ bool process_leader(uint16_t keycode, keyrecord_t *record) {
keycode = keycode & 0xFF;
}
#endif // LEADER_KEY_STRICT_KEY_PROCESSING
- leader_sequence[leader_sequence_size] = keycode;
- leader_sequence_size++;
+ if ( leader_sequence_size < ( sizeof(leader_sequence) / sizeof(leader_sequence[0]) ) ) {
+ leader_sequence[leader_sequence_size] = keycode;
+ leader_sequence_size++;
+ } else {
+ leading = false;
+ leader_end();
+ }
#ifdef LEADER_PER_KEY_TIMING
leader_time = timer_read();
#endif
diff --git a/quantum/process_keycode/process_space_cadet.c b/quantum/process_keycode/process_space_cadet.c
index 089199eee..c8721d446 100644
--- a/quantum/process_keycode/process_space_cadet.c
+++ b/quantum/process_keycode/process_space_cadet.c
@@ -81,11 +81,17 @@
static uint8_t sc_last = 0;
static uint16_t sc_timer = 0;
+#ifdef SPACE_CADET_MODIFIER_CARRYOVER
+static uint8_t sc_mods = 0;
+#endif
void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, uint8_t keycode) {
if (record->event.pressed) {
sc_last = holdMod;
sc_timer = timer_read ();
+#ifdef SPACE_CADET_MODIFIER_CARRYOVER
+ sc_mods = get_mods();
+#endif
if (IS_MOD(holdMod)) {
register_mods(MOD_BIT(holdMod));
}
@@ -100,7 +106,13 @@ void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, u
register_mods(MOD_BIT(tapMod));
}
}
+#ifdef SPACE_CADET_MODIFIER_CARRYOVER
+ set_weak_mods(sc_mods);
+#endif
tap_code(keycode);
+#ifdef SPACE_CADET_MODIFIER_CARRYOVER
+ clear_weak_mods();
+#endif
if (IS_MOD(tapMod)) {
unregister_mods(MOD_BIT(tapMod));
}
diff --git a/quantum/process_keycode/process_ucis.c b/quantum/process_keycode/process_ucis.c
index 5de2e41fc..fd4508b53 100644
--- a/quantum/process_keycode/process_ucis.c
+++ b/quantum/process_keycode/process_ucis.c
@@ -64,6 +64,10 @@ void qk_ucis_symbol_fallback (void) {
}
}
+__attribute__((weak))
+void qk_ucis_cancel(void) {
+}
+
void register_ucis(const char *hex) {
for(int i = 0; hex[i]; i++) {
uint8_t kc = 0;
@@ -130,6 +134,7 @@ bool process_ucis (uint16_t keycode, keyrecord_t *record) {
if (keycode == KC_ESC) {
qk_ucis_state.in_progress = false;
+ qk_ucis_cancel();
return false;
}
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 6530738b7..d98c601d9 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -708,7 +708,7 @@ bool process_record_quantum(keyrecord_t *record) {
#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
case BL_BRTG: {
if (record->event.pressed) {
- breathing_toggle();
+ backlight_toggle_breathing();
}
return false;
}
@@ -719,11 +719,12 @@ bool process_record_quantum(keyrecord_t *record) {
}
__attribute__ ((weak))
-const bool ascii_to_shift_lut[0x80] PROGMEM = {
+const bool ascii_to_shift_lut[128] 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, 1, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -739,11 +740,12 @@ const bool ascii_to_shift_lut[0x80] PROGMEM = {
};
__attribute__ ((weak))
-const bool ascii_to_altgr_lut[0x80] PROGMEM = {
+const bool ascii_to_altgr_lut[128] 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, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -759,23 +761,40 @@ const bool ascii_to_altgr_lut[0x80] PROGMEM = {
};
__attribute__ ((weak))
-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,
- KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
- KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
- KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
- KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
- KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
- KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
- KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
- KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
- KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
+ // ( ) * + , - . /
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
+ // 0 1 2 3 4 5 6 7
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ // 8 9 : ; < = > ?
+ KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
+ // @ A B C D E F G
+ KC_2, KC_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, KC_M, KC_N, KC_O,
+ // P Q R S T U V W
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // X Y Z [ \ ] ^ _
+ KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
+ // ` a b c d e f g
+ KC_GRV, KC_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, KC_M, KC_N, KC_O,
+ // p q r s t u v w
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ // x y z { | } ~ DEL
+ KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
};
void send_string(const char *str) {
@@ -1177,6 +1196,12 @@ void backlight_init_ports(void)
setPinOutput(backlight_pin);
backlight_on(backlight_pin);
)
+
+ #ifdef BACKLIGHT_BREATHING
+ if (is_backlight_breathing()) {
+ breathing_enable();
+ }
+ #endif
}
__attribute__ ((weak))
@@ -1481,7 +1506,9 @@ void backlight_init_ports(void)
backlight_init();
#ifdef BACKLIGHT_BREATHING
- breathing_enable();
+ if (is_backlight_breathing()) {
+ breathing_enable();
+ }
#endif
}
@@ -1581,23 +1608,6 @@ void led_init_ports(void)
__attribute__ ((weak))
void led_set(uint8_t usb_led)
{
-
- // Example LED Code
- //
- // // Using PE6 Caps Lock LED
- // if (usb_led & (1<<USB_LED_CAPS_LOCK))
- // {
- // // Output high.
- // DDRE |= (1<<6);
- // PORTE |= (1<<6);
- // }
- // else
- // {
- // // Output low.
- // DDRE &= ~(1<<6);
- // PORTE &= ~(1<<6);
- // }
-
#if defined(BACKLIGHT_CAPS_LOCK) && defined(BACKLIGHT_ENABLE)
// Use backlight as Caps Lock indicator
uint8_t bl_toggle_lvl = 0;
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 451dd8a4b..56f30624c 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -13,8 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef QUANTUM_H
-#define QUANTUM_H
+#pragma once
#if defined(__AVR__)
#include <avr/pgmspace.h>
@@ -24,9 +23,11 @@
#if defined(PROTOCOL_CHIBIOS)
#include "hal.h"
#endif
+
#include "wait.h"
#include "matrix.h"
#include "keymap.h"
+
#ifdef BACKLIGHT_ENABLE
#ifdef LED_MATRIX_ENABLE
#include "ledmatrix.h"
@@ -34,14 +35,13 @@
#include "backlight.h"
#endif
#endif
-#ifdef RGBLIGHT_ENABLE
- #include "rgblight.h"
-#else
- #ifdef RGB_MATRIX_ENABLE
- /* dummy define RGBLIGHT_MODE_xxxx */
- #define RGBLIGHT_H_DUMMY_DEFINE
- #include "rgblight.h"
- #endif
+
+#if defined(RGBLIGHT_ENABLE)
+ #include "rgblight.h"
+#elif defined(RGB_MATRIX_ENABLE)
+ // Dummy define RGBLIGHT_MODE_xxxx
+ #define RGBLIGHT_H_DUMMY_DEFINE
+ #include "rgblight.h"
#endif
#ifdef RGB_MATRIX_ENABLE
@@ -50,16 +50,16 @@
#include "action_layer.h"
#include "eeconfig.h"
-#include <stddef.h>
#include "bootloader.h"
#include "timer.h"
#include "config_common.h"
#include "led.h"
#include "action_util.h"
-#include <stdlib.h>
#include "print.h"
#include "send_string_keycodes.h"
#include "suspend.h"
+#include <stddef.h>
+#include <stdlib.h>
extern layer_state_t default_layer_state;
@@ -67,18 +67,16 @@ extern layer_state_t default_layer_state;
extern layer_state_t layer_state;
#endif
-#ifdef MIDI_ENABLE
-#ifdef MIDI_ADVANCED
+#if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED)
#include "process_midi.h"
#endif
-#endif // MIDI_ENABLE
#ifdef AUDIO_ENABLE
#include "audio.h"
#include "process_audio.h"
#ifdef AUDIO_CLICKY
#include "process_clicky.h"
- #endif // AUDIO_CLICKY
+ #endif
#endif
#ifdef STENO_ENABLE
@@ -106,7 +104,7 @@ extern layer_state_t default_layer_state;
#endif
#ifdef TAP_DANCE_ENABLE
- #include "process_tap_dance.h"
+ #include "process_tap_dance.h"
#endif
#ifdef PRINTING_ENABLE
@@ -132,7 +130,7 @@ extern layer_state_t default_layer_state;
#endif
#ifdef SPACE_CADET_ENABLE
- #include "process_space_cadet.h"
+ #include "process_space_cadet.h"
#endif
#ifdef HD44780_ENABLE
@@ -147,50 +145,38 @@ extern layer_state_t default_layer_state;
#include "oled_driver.h"
#endif
-//Function substitutions to ease GPIO manipulation
-#ifdef __AVR__
- #define PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + (p >> PORT_SHIFTER) + offset)
-
- #define pin_t uint8_t
- #define setPinInput(pin) PIN_ADDRESS(pin, 1) &= ~ _BV(pin & 0xF)
- #define setPinInputHigh(pin) ({\
- PIN_ADDRESS(pin, 1) &= ~ _BV(pin & 0xF);\
- PIN_ADDRESS(pin, 2) |= _BV(pin & 0xF);\
- })
- #define setPinInputLow(pin) _Static_assert(0, "AVR Processors cannot impliment an input as pull low")
- #define setPinOutput(pin) PIN_ADDRESS(pin, 1) |= _BV(pin & 0xF)
-
- #define writePinHigh(pin) PIN_ADDRESS(pin, 2) |= _BV(pin & 0xF)
- #define writePinLow(pin) PIN_ADDRESS(pin, 2) &= ~_BV(pin & 0xF)
- static inline void writePin(pin_t pin, uint8_t level){
- if (level){
- PIN_ADDRESS(pin, 2) |= _BV(pin & 0xF);
- } else {
- PIN_ADDRESS(pin, 2) &= ~_BV(pin & 0xF);
- }
- }
-
- #define readPin(pin) ((bool)(PIN_ADDRESS(pin, 0) & _BV(pin & 0xF)))
+// Function substitutions to ease GPIO manipulation
+#if defined(__AVR__)
+ typedef uint8_t pin_t;
+
+ #define PIN_ADDRESS(p, offset) (_SFR_IO8(ADDRESS_BASE + ((p) >> PORT_SHIFTER) + (offset)))
+ #define setPinInput(pin) (PIN_ADDRESS(pin, 1) &= ~_BV((pin) & 0xF))
+ #define setPinInputHigh(pin) (PIN_ADDRESS(pin, 1) &= ~_BV((pin) & 0xF), \
+ PIN_ADDRESS(pin, 2) |= _BV((pin) & 0xF))
+ #define setPinInputLow(pin) _Static_assert(0, "AVR processors cannot implement an input as pull low")
+ #define setPinOutput(pin) (PIN_ADDRESS(pin, 1) |= _BV((pin) & 0xF))
+
+ #define writePinHigh(pin) (PIN_ADDRESS(pin, 2) |= _BV((pin) & 0xF))
+ #define writePinLow(pin) (PIN_ADDRESS(pin, 2) &= ~_BV((pin) & 0xF))
+ #define writePin(pin, level) ((level) ? writePinHigh(pin) : writePinLow(pin))
+
+ #define readPin(pin) ((bool)(PIN_ADDRESS(pin, 0) & _BV((pin) & 0xF)))
#elif defined(PROTOCOL_CHIBIOS)
- #define pin_t ioline_t
- #define setPinInput(pin) palSetLineMode(pin, PAL_MODE_INPUT)
- #define setPinInputHigh(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)
- #define setPinInputLow(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)
- #define setPinOutput(pin) palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)
-
- #define writePinHigh(pin) palSetLine(pin)
- #define writePinLow(pin) palClearLine(pin)
- static inline void writePin(pin_t pin, uint8_t level){
- if (level){
- palSetLine(pin);
- } else {
- palClearLine(pin);
- }
- }
-
- #define readPin(pin) palReadLine(pin)
+ typedef ioline_t pin_t;
+
+ #define setPinInput(pin) palSetLineMode(pin, PAL_MODE_INPUT)
+ #define setPinInputHigh(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)
+ #define setPinInputLow(pin) palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)
+ #define setPinOutput(pin) palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)
+
+ #define writePinHigh(pin) palSetLine(pin)
+ #define writePinLow(pin) palClearLine(pin)
+ #define writePin(pin, level) ((level) ? writePinHigh(pin) : writePinLow(pin))
+
+ #define readPin(pin) palReadLine(pin)
#endif
+// Send string macros
#define STRINGIZE(z) #z
#define ADD_SLASH_X(y) STRINGIZE(\x ## y)
#define SYMBOL_STR(x) ADD_SLASH_X(x)
@@ -203,6 +189,7 @@ extern layer_state_t default_layer_state;
#define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode)
#define SS_UP(keycode) "\3" SYMBOL_STR(keycode)
+// `string` arguments must not be parenthesized
#define SS_LCTRL(string) SS_DOWN(X_LCTRL) string SS_UP(X_LCTRL)
#define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI)
#define SS_LCMD(string) SS_LGUI(string)
@@ -212,10 +199,12 @@ extern layer_state_t default_layer_state;
#define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT)
#define SS_ALGR(string) SS_RALT(string)
-#define SEND_STRING(str) send_string_P(PSTR(str))
-extern const bool ascii_to_shift_lut[0x80];
-extern const bool ascii_to_altgr_lut[0x80];
-extern const uint8_t ascii_to_keycode_lut[0x80];
+#define SEND_STRING(string) send_string_P(PSTR(string))
+
+extern const bool ascii_to_shift_lut[128];
+extern const bool ascii_to_altgr_lut[128];
+extern const uint8_t ascii_to_keycode_lut[128];
+
void send_string(const char *str);
void send_string_with_delay(const char *str, uint8_t interval);
void send_string_P(const char *str);
@@ -244,10 +233,10 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record);
bool process_record_user(uint16_t keycode, keyrecord_t *record);
#ifndef BOOTMAGIC_LITE_COLUMN
- #define BOOTMAGIC_LITE_COLUMN 0
+ #define BOOTMAGIC_LITE_COLUMN 0
#endif
#ifndef BOOTMAGIC_LITE_ROW
- #define BOOTMAGIC_LITE_ROW 0
+ #define BOOTMAGIC_LITE_ROW 0
#endif
void bootmagic_lite(void);
@@ -268,7 +257,7 @@ void backlight_task_internal(void);
void backlight_on(uint8_t backlight_pin);
void backlight_off(uint8_t backlight_pin);
-#ifdef BACKLIGHT_BREATHING
+ #ifdef BACKLIGHT_BREATHING
void breathing_task(void);
void breathing_enable(void);
void breathing_pulse(void);
@@ -282,9 +271,9 @@ void breathing_period_default(void);
void breathing_period_set(uint8_t value);
void breathing_period_inc(void);
void breathing_period_dec(void);
+ #endif
#endif
-#endif
void send_dword(uint32_t number);
void send_word(uint16_t number);
void send_byte(uint8_t number);
@@ -295,5 +284,3 @@ void led_set_user(uint8_t usb_led);
void led_set_kb(uint8_t usb_led);
void api_send_unicode(uint32_t unicode);
-
-#endif
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h
index 779c355ef..207e0a826 100644
--- a/quantum/quantum_keycodes.h
+++ b/quantum/quantum_keycodes.h
@@ -489,6 +489,9 @@ enum quantum_keycodes {
// Right control, close paren
KC_RAPC,
+ CMB_ON,
+ CMB_OFF,
+ CMB_TOG,
// always leave at the end
SAFE_RANGE
};
diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c
index 98baf5cb5..f170cfc1b 100644
--- a/quantum/rgb_matrix.c
+++ b/quantum/rgb_matrix.c
@@ -66,10 +66,6 @@
#define RGB_DISABLE_WHEN_USB_SUSPENDED false
#endif
-#ifndef EECONFIG_RGB_MATRIX
- #define EECONFIG_RGB_MATRIX EECONFIG_RGBLIGHT
-#endif
-
#if !defined(RGB_MATRIX_MAXIMUM_BRIGHTNESS) || RGB_MATRIX_MAXIMUM_BRIGHTNESS > UINT8_MAX
#undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS UINT8_MAX
@@ -116,32 +112,30 @@ uint8_t rgb_frame_buffer[MATRIX_ROWS][MATRIX_COLS] = {{0}};
static last_hit_t last_hit_buffer;
#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
-uint32_t eeconfig_read_rgb_matrix(void) {
- return eeprom_read_dword(EECONFIG_RGB_MATRIX);
+void eeconfig_read_rgb_matrix(void) {
+ eeprom_read_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
}
-void eeconfig_update_rgb_matrix(uint32_t val) {
- eeprom_update_dword(EECONFIG_RGB_MATRIX, val);
+void eeconfig_update_rgb_matrix(void) {
+ eeprom_update_block(&rgb_matrix_config, EECONFIG_RGB_MATRIX, sizeof(rgb_matrix_config));
}
void eeconfig_update_rgb_matrix_default(void) {
dprintf("eeconfig_update_rgb_matrix_default\n");
rgb_matrix_config.enable = 1;
rgb_matrix_config.mode = RGB_MATRIX_STARTUP_MODE;
- rgb_matrix_config.hue = 0;
- rgb_matrix_config.sat = UINT8_MAX;
- rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+ rgb_matrix_config.hsv = (HSV){ 0, UINT8_MAX, RGB_MATRIX_MAXIMUM_BRIGHTNESS };
rgb_matrix_config.speed = UINT8_MAX / 2;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void eeconfig_debug_rgb_matrix(void) {
dprintf("rgb_matrix_config eprom\n");
dprintf("rgb_matrix_config.enable = %d\n", rgb_matrix_config.enable);
dprintf("rgb_matrix_config.mode = %d\n", rgb_matrix_config.mode);
- dprintf("rgb_matrix_config.hue = %d\n", rgb_matrix_config.hue);
- dprintf("rgb_matrix_config.sat = %d\n", rgb_matrix_config.sat);
- dprintf("rgb_matrix_config.val = %d\n", rgb_matrix_config.val);
+ dprintf("rgb_matrix_config.hsv.h = %d\n", rgb_matrix_config.hsv.h);
+ dprintf("rgb_matrix_config.hsv.s = %d\n", rgb_matrix_config.hsv.s);
+ dprintf("rgb_matrix_config.hsv.v = %d\n", rgb_matrix_config.hsv.v);
dprintf("rgb_matrix_config.speed = %d\n", rgb_matrix_config.speed);
}
@@ -433,12 +427,10 @@ void rgb_matrix_init(void) {
eeconfig_update_rgb_matrix_default();
}
- rgb_matrix_config.raw = eeconfig_read_rgb_matrix();
- rgb_matrix_config.speed = UINT8_MAX / 2; //EECONFIG needs to be increased to support this
+ eeconfig_read_rgb_matrix();
if (!rgb_matrix_config.mode) {
dprintf("rgb_matrix_init_drivers rgb_matrix_config.mode = 0. Write default values to EEPROM.\n");
eeconfig_update_rgb_matrix_default();
- rgb_matrix_config.raw = eeconfig_read_rgb_matrix();
}
eeconfig_debug_rgb_matrix(); // display current eeprom values
}
@@ -450,12 +442,12 @@ void rgb_matrix_set_suspend_state(bool state) {
void rgb_matrix_toggle(void) {
rgb_matrix_config.enable ^= 1;
rgb_task_state = STARTING;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_enable(void) {
rgb_matrix_enable_noeeprom();
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_enable_noeeprom(void) {
@@ -466,7 +458,7 @@ void rgb_matrix_enable_noeeprom(void) {
void rgb_matrix_disable(void) {
rgb_matrix_disable_noeeprom();
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_disable_noeeprom(void) {
@@ -480,7 +472,7 @@ void rgb_matrix_step(void) {
if (rgb_matrix_config.mode >= RGB_MATRIX_EFFECT_MAX)
rgb_matrix_config.mode = 1;
rgb_task_state = STARTING;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_step_reverse(void) {
@@ -488,49 +480,49 @@ void rgb_matrix_step_reverse(void) {
if (rgb_matrix_config.mode < 1)
rgb_matrix_config.mode = RGB_MATRIX_EFFECT_MAX - 1;
rgb_task_state = STARTING;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_increase_hue(void) {
- rgb_matrix_config.hue += RGB_MATRIX_HUE_STEP;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ rgb_matrix_config.hsv.h += RGB_MATRIX_HUE_STEP;
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_decrease_hue(void) {
- rgb_matrix_config.hue -= RGB_MATRIX_HUE_STEP;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ rgb_matrix_config.hsv.h -= RGB_MATRIX_HUE_STEP;
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_increase_sat(void) {
- rgb_matrix_config.sat = qadd8(rgb_matrix_config.sat, RGB_MATRIX_SAT_STEP);
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ rgb_matrix_config.hsv.s = qadd8(rgb_matrix_config.hsv.s, RGB_MATRIX_SAT_STEP);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_decrease_sat(void) {
- rgb_matrix_config.sat = qsub8(rgb_matrix_config.sat, RGB_MATRIX_SAT_STEP);
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ rgb_matrix_config.hsv.s = qsub8(rgb_matrix_config.hsv.s, RGB_MATRIX_SAT_STEP);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_increase_val(void) {
- rgb_matrix_config.val = qadd8(rgb_matrix_config.val, RGB_MATRIX_VAL_STEP);
- if (rgb_matrix_config.val > RGB_MATRIX_MAXIMUM_BRIGHTNESS)
- rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ rgb_matrix_config.hsv.v = qadd8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP);
+ if (rgb_matrix_config.hsv.v > RGB_MATRIX_MAXIMUM_BRIGHTNESS)
+ rgb_matrix_config.hsv.v = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_decrease_val(void) {
- rgb_matrix_config.val = qsub8(rgb_matrix_config.val, RGB_MATRIX_VAL_STEP);
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ rgb_matrix_config.hsv.v = qsub8(rgb_matrix_config.hsv.v, RGB_MATRIX_VAL_STEP);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_increase_speed(void) {
rgb_matrix_config.speed = qadd8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP);
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);//EECONFIG needs to be increased to support this
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_decrease_speed(void) {
rgb_matrix_config.speed = qsub8(rgb_matrix_config.speed, RGB_MATRIX_SPD_STEP);
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);//EECONFIG needs to be increased to support this
+ eeconfig_update_rgb_matrix();
}
led_flags_t rgb_matrix_get_flags(void) {
@@ -544,7 +536,7 @@ void rgb_matrix_set_flags(led_flags_t flags) {
void rgb_matrix_mode(uint8_t mode) {
rgb_matrix_config.mode = mode;
rgb_task_state = STARTING;
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_mode_noeeprom(uint8_t mode) {
@@ -557,13 +549,13 @@ uint8_t rgb_matrix_get_mode(void) {
void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val) {
rgb_matrix_sethsv_noeeprom(hue, sat, val);
- eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
+ eeconfig_update_rgb_matrix();
}
void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
- rgb_matrix_config.hue = hue;
- rgb_matrix_config.sat = sat;
- rgb_matrix_config.val = val;
- if (rgb_matrix_config.val > RGB_MATRIX_MAXIMUM_BRIGHTNESS)
- rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+ rgb_matrix_config.hsv.h = hue;
+ rgb_matrix_config.hsv.s = sat;
+ rgb_matrix_config.hsv.v = val;
+ if (rgb_matrix_config.hsv.v > RGB_MATRIX_MAXIMUM_BRIGHTNESS)
+ rgb_matrix_config.hsv.v = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
}
diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h
index 96a8b7662..749926822 100644
--- a/quantum/rgb_matrix.h
+++ b/quantum/rgb_matrix.h
@@ -56,12 +56,6 @@
#define RGB_MATRIX_TEST_LED_FLAGS() if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) continue
-typedef struct
-{
- HSV color;
- uint8_t index;
-} rgb_indicator;
-
enum rgb_matrix_effects {
RGB_MATRIX_NONE = 0,
@@ -87,11 +81,18 @@ enum rgb_matrix_effects {
RGB_MATRIX_EFFECT_MAX
};
+void eeconfig_update_rgb_matrix_default(void);
+
+uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i);
uint8_t rgb_matrix_map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i);
void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
+bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record);
+
+void rgb_matrix_task(void);
+
// This runs after another backlight effect and replaces
// colors already set
void rgb_matrix_indicators(void);
@@ -99,37 +100,14 @@ void rgb_matrix_indicators_kb(void);
void rgb_matrix_indicators_user(void);
void rgb_matrix_init(void);
-void rgb_matrix_setup_drivers(void);
void rgb_matrix_set_suspend_state(bool state);
-void rgb_matrix_set_indicator_state(uint8_t state);
-
-
-void rgb_matrix_task(void);
-
-// This should not be called from an interrupt
-// (eg. from a timer interrupt).
-// Call this while idle (in between matrix scans).
-// If the buffer is dirty, it will update the driver with the buffer.
-void rgb_matrix_update_pwm_buffers(void);
-
-bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record);
-
-void rgb_matrix_increase(void);
-void rgb_matrix_decrease(void);
-
-// void *backlight_get_key_color_eeprom_address(uint8_t led);
-// void backlight_get_key_color( uint8_t led, HSV *hsv );
-// void backlight_set_key_color( uint8_t row, uint8_t column, HSV hsv );
-
void rgb_matrix_toggle(void);
void rgb_matrix_enable(void);
void rgb_matrix_enable_noeeprom(void);
void rgb_matrix_disable(void);
void rgb_matrix_disable_noeeprom(void);
void rgb_matrix_step(void);
-void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
-void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
void rgb_matrix_step_reverse(void);
void rgb_matrix_increase_hue(void);
void rgb_matrix_decrease_hue(void);
@@ -144,6 +122,8 @@ void rgb_matrix_set_flags(led_flags_t flags);
void rgb_matrix_mode(uint8_t mode);
void rgb_matrix_mode_noeeprom(uint8_t mode);
uint8_t rgb_matrix_get_mode(void);
+void rgb_matrix_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
+void rgb_matrix_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
#ifndef RGBLIGHT_ENABLE
#define rgblight_toggle() rgb_matrix_toggle()
@@ -166,7 +146,6 @@ uint8_t rgb_matrix_get_mode(void);
#define rgblight_mode(mode) rgb_matrix_mode(mode)
#define rgblight_mode_noeeprom(mode) rgb_matrix_mode_noeeprom(mode)
#define rgblight_get_mode() rgb_matrix_get_mode()
-
#endif
typedef struct {
diff --git a/quantum/rgb_matrix_animations/alpha_mods_anim.h b/quantum/rgb_matrix_animations/alpha_mods_anim.h
index 0fee19aef..8df3356f6 100644
--- a/quantum/rgb_matrix_animations/alpha_mods_anim.h
+++ b/quantum/rgb_matrix_animations/alpha_mods_anim.h
@@ -6,7 +6,7 @@ RGB_MATRIX_EFFECT(ALPHAS_MODS)
bool ALPHAS_MODS(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
+ HSV hsv = rgb_matrix_config.hsv;
RGB rgb1 = hsv_to_rgb(hsv);
hsv.h += rgb_matrix_config.speed;
RGB rgb2 = hsv_to_rgb(hsv);
diff --git a/quantum/rgb_matrix_animations/breathing_anim.h b/quantum/rgb_matrix_animations/breathing_anim.h
index c357b5303..0af7b42cf 100644
--- a/quantum/rgb_matrix_animations/breathing_anim.h
+++ b/quantum/rgb_matrix_animations/breathing_anim.h
@@ -5,9 +5,9 @@ RGB_MATRIX_EFFECT(BREATHING)
bool BREATHING(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ HSV hsv = rgb_matrix_config.hsv;
uint16_t time = scale16by8(g_rgb_counters.tick, rgb_matrix_config.speed / 8);
- uint8_t val = scale8(abs8(sin8(time) - 128) * 2, rgb_matrix_config.val);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, val };
+ hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
RGB rgb = hsv_to_rgb(hsv);
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
diff --git a/quantum/rgb_matrix_animations/colorband_pinwheel_sat_anim.h b/quantum/rgb_matrix_animations/colorband_pinwheel_sat_anim.h
index cf9c0784a..4585c5271 100644
--- a/quantum/rgb_matrix_animations/colorband_pinwheel_sat_anim.h
+++ b/quantum/rgb_matrix_animations/colorband_pinwheel_sat_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(BAND_PINWHEEL_SAT)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void BAND_PINWHEEL_SAT_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t time) {
- hsv->s = rgb_matrix_config.sat - time - atan2_8(dy, dx) * 3;
+static HSV BAND_PINWHEEL_SAT_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time) {
+ hsv.s = scale8(hsv.s - time - atan2_8(dy, dx) * 3, hsv.s);
+ return hsv;
}
bool BAND_PINWHEEL_SAT(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/colorband_pinwheel_val_anim.h b/quantum/rgb_matrix_animations/colorband_pinwheel_val_anim.h
index 05ad0ee32..5cdb87348 100644
--- a/quantum/rgb_matrix_animations/colorband_pinwheel_val_anim.h
+++ b/quantum/rgb_matrix_animations/colorband_pinwheel_val_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(BAND_PINWHEEL_VAL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void BAND_PINWHEEL_VAL_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t time) {
- hsv->v = rgb_matrix_config.val - time - atan2_8(dy, dx) * 3;
+static HSV BAND_PINWHEEL_VAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time) {
+ hsv.v = scale8(hsv.v - time - atan2_8(dy, dx) * 3, hsv.v);
+ return hsv;
}
bool BAND_PINWHEEL_VAL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/colorband_sat_anim.h b/quantum/rgb_matrix_animations/colorband_sat_anim.h
index 8a40473e4..a5175f1cd 100644
--- a/quantum/rgb_matrix_animations/colorband_sat_anim.h
+++ b/quantum/rgb_matrix_animations/colorband_sat_anim.h
@@ -2,9 +2,10 @@
RGB_MATRIX_EFFECT(BAND_SAT)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void BAND_SAT_math(HSV* hsv, uint8_t i, uint8_t time) {
- int16_t s = rgb_matrix_config.sat - abs(scale8(g_led_config.point[i].x, 228) + 28 - time) * 8;
- hsv->s = s < 0 ? 0 : s;
+static HSV BAND_SAT_math(HSV hsv, uint8_t i, uint8_t time) {
+ int16_t s = hsv.s - abs(scale8(g_led_config.point[i].x, 228) + 28 - time) * 8;
+ hsv.s = scale8(s < 0 ? 0 : s, hsv.s);
+ return hsv;
}
bool BAND_SAT(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/colorband_spiral_sat_anim.h b/quantum/rgb_matrix_animations/colorband_spiral_sat_anim.h
index 4af6c60b0..096c675de 100644
--- a/quantum/rgb_matrix_animations/colorband_spiral_sat_anim.h
+++ b/quantum/rgb_matrix_animations/colorband_spiral_sat_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(BAND_SPIRAL_SAT)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void BAND_SPIRAL_SAT_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
- hsv->s = rgb_matrix_config.sat + dist - time - atan2_8(dy, dx);
+static HSV BAND_SPIRAL_SAT_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
+ hsv.s = scale8(hsv.s + dist - time - atan2_8(dy, dx), hsv.s);
+ return hsv;
}
bool BAND_SPIRAL_SAT(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/colorband_spiral_val_anim.h b/quantum/rgb_matrix_animations/colorband_spiral_val_anim.h
index e787956a7..1d4cc0c84 100644
--- a/quantum/rgb_matrix_animations/colorband_spiral_val_anim.h
+++ b/quantum/rgb_matrix_animations/colorband_spiral_val_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(BAND_SPIRAL_VAL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void BAND_SPIRAL_VAL_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
- hsv->v = rgb_matrix_config.val + dist - time - atan2_8(dy, dx);
+static HSV BAND_SPIRAL_VAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
+ hsv.v = scale8(hsv.v + dist - time - atan2_8(dy, dx), hsv.v);
+ return hsv;
}
bool BAND_SPIRAL_VAL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/colorband_val_anim.h b/quantum/rgb_matrix_animations/colorband_val_anim.h
index 1e3740cea..de0bbb471 100644
--- a/quantum/rgb_matrix_animations/colorband_val_anim.h
+++ b/quantum/rgb_matrix_animations/colorband_val_anim.h
@@ -2,9 +2,10 @@
RGB_MATRIX_EFFECT(BAND_VAL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void BAND_VAL_math(HSV* hsv, uint8_t i, uint8_t time) {
- int16_t v = rgb_matrix_config.val - abs(scale8(g_led_config.point[i].x, 228) + 28 - time) * 8;
- hsv->v = v < 0 ? 0 : v;
+static HSV BAND_VAL_math(HSV hsv, uint8_t i, uint8_t time) {
+ int16_t v = hsv.v - abs(scale8(g_led_config.point[i].x, 228) + 28 - time) * 8;
+ hsv.v = scale8(v < 0 ? 0 : v, hsv.v);
+ return hsv;
}
bool BAND_VAL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_all_anim.h b/quantum/rgb_matrix_animations/cycle_all_anim.h
index 380dbe05a..0c45aba8b 100644
--- a/quantum/rgb_matrix_animations/cycle_all_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_all_anim.h
@@ -2,9 +2,9 @@
RGB_MATRIX_EFFECT(CYCLE_ALL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_ALL_math(HSV* hsv, uint8_t i, uint8_t time)
-{
- hsv->h = time;
+static HSV CYCLE_ALL_math(HSV hsv, uint8_t i, uint8_t time){
+ hsv.h = time;
+ return hsv;
}
bool CYCLE_ALL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_left_right_anim.h b/quantum/rgb_matrix_animations/cycle_left_right_anim.h
index f270fb42c..d2e5b4fbd 100644
--- a/quantum/rgb_matrix_animations/cycle_left_right_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_left_right_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(CYCLE_LEFT_RIGHT)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_LEFT_RIGHT_math(HSV* hsv, uint8_t i, uint8_t time) {
- hsv->h = g_led_config.point[i].x - time;
+static HSV CYCLE_LEFT_RIGHT_math(HSV hsv, uint8_t i, uint8_t time) {
+ hsv.h = g_led_config.point[i].x - time;
+ return hsv;
}
bool CYCLE_LEFT_RIGHT(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_out_in_anim.h b/quantum/rgb_matrix_animations/cycle_out_in_anim.h
index 46c7efef2..fa7c3b09c 100644
--- a/quantum/rgb_matrix_animations/cycle_out_in_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_out_in_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(CYCLE_OUT_IN)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_OUT_IN_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
- hsv->h = 3 * dist / 2 + time;
+static HSV CYCLE_OUT_IN_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
+ hsv.h = 3 * dist / 2 + time;
+ return hsv;
}
bool CYCLE_OUT_IN(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_out_in_dual_anim.h b/quantum/rgb_matrix_animations/cycle_out_in_dual_anim.h
index 2fdb4ba91..74a2c9aa5 100644
--- a/quantum/rgb_matrix_animations/cycle_out_in_dual_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_out_in_dual_anim.h
@@ -2,10 +2,11 @@
RGB_MATRIX_EFFECT(CYCLE_OUT_IN_DUAL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_OUT_IN_DUAL_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t time) {
+static HSV CYCLE_OUT_IN_DUAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time) {
dx = (k_rgb_matrix_center.x / 2) - abs8(dx);
uint8_t dist = sqrt16(dx * dx + dy * dy);
- hsv->h = 3 * dist + time;
+ hsv.h = 3 * dist + time;
+ return hsv;
}
bool CYCLE_OUT_IN_DUAL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_pinwheel_anim.h b/quantum/rgb_matrix_animations/cycle_pinwheel_anim.h
index 29e2d92c9..54e222dc2 100644
--- a/quantum/rgb_matrix_animations/cycle_pinwheel_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_pinwheel_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(CYCLE_PINWHEEL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_PINWHEEL_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t time) {
- hsv->h = atan2_8(dy, dx) + time;
+static HSV CYCLE_PINWHEEL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t time) {
+ hsv.h = atan2_8(dy, dx) + time;
+ return hsv;
}
bool CYCLE_PINWHEEL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_spiral_anim.h b/quantum/rgb_matrix_animations/cycle_spiral_anim.h
index a1354f60c..b27d7a83c 100644
--- a/quantum/rgb_matrix_animations/cycle_spiral_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_spiral_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(CYCLE_SPIRAL)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_SPIRAL_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
- hsv->h = dist - time - atan2_8(dy, dx);
+static HSV CYCLE_SPIRAL_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time) {
+ hsv.h = dist - time - atan2_8(dy, dx);
+ return hsv;
}
bool CYCLE_SPIRAL(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/cycle_up_down_anim.h b/quantum/rgb_matrix_animations/cycle_up_down_anim.h
index b3ef4cdf2..4bf8ef2ae 100644
--- a/quantum/rgb_matrix_animations/cycle_up_down_anim.h
+++ b/quantum/rgb_matrix_animations/cycle_up_down_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(CYCLE_UP_DOWN)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void CYCLE_UP_DOWN_math(HSV* hsv, uint8_t i, uint8_t time) {
- hsv->h = g_led_config.point[i].y - time;
+static HSV CYCLE_UP_DOWN_math(HSV hsv, uint8_t i, uint8_t time) {
+ hsv.h = g_led_config.point[i].y - time;
+ return hsv;
}
bool CYCLE_UP_DOWN(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/dual_beacon_anim.h b/quantum/rgb_matrix_animations/dual_beacon_anim.h
index d34f146a5..336a41b2c 100644
--- a/quantum/rgb_matrix_animations/dual_beacon_anim.h
+++ b/quantum/rgb_matrix_animations/dual_beacon_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(DUAL_BEACON)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void DUAL_BEACON_math(HSV* hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
- hsv->h = ((g_led_config.point[i].y - k_rgb_matrix_center.y) * cos + (g_led_config.point[i].x - k_rgb_matrix_center.x) * sin) / 128 + rgb_matrix_config.hue;
+static HSV DUAL_BEACON_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
+ hsv.h += ((g_led_config.point[i].y - k_rgb_matrix_center.y) * cos + (g_led_config.point[i].x - k_rgb_matrix_center.x) * sin) / 128;
+ return hsv;
}
bool DUAL_BEACON(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/gradient_up_down_anim.h b/quantum/rgb_matrix_animations/gradient_up_down_anim.h
index d9fcd4d98..12848ab4c 100644
--- a/quantum/rgb_matrix_animations/gradient_up_down_anim.h
+++ b/quantum/rgb_matrix_animations/gradient_up_down_anim.h
@@ -5,13 +5,13 @@ RGB_MATRIX_EFFECT(GRADIENT_UP_DOWN)
bool GRADIENT_UP_DOWN(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { 0, rgb_matrix_config.sat, rgb_matrix_config.val };
+ HSV hsv = rgb_matrix_config.hsv;
uint8_t scale = scale8(64, rgb_matrix_config.speed);
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
// The y range will be 0..64, map this to 0..4
// Relies on hue being 8-bit and wrapping
- hsv.h = rgb_matrix_config.hue + scale * (g_led_config.point[i].y >> 4);
+ hsv.h = rgb_matrix_config.hsv.h + scale * (g_led_config.point[i].y >> 4);
RGB rgb = hsv_to_rgb(hsv);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
diff --git a/quantum/rgb_matrix_animations/jellybean_raindrops_anim.h b/quantum/rgb_matrix_animations/jellybean_raindrops_anim.h
index 8f0b1bd91..bffa0a42d 100644
--- a/quantum/rgb_matrix_animations/jellybean_raindrops_anim.h
+++ b/quantum/rgb_matrix_animations/jellybean_raindrops_anim.h
@@ -4,7 +4,7 @@ RGB_MATRIX_EFFECT(JELLYBEAN_RAINDROPS)
static void jellybean_raindrops_set_color(int i, effect_params_t* params) {
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
- HSV hsv = { rand() & 0xFF , rand() & 0xFF, rgb_matrix_config.val };
+ HSV hsv = { rand() & 0xFF , rand() & 0xFF, rgb_matrix_config.hsv.v };
RGB rgb = hsv_to_rgb(hsv);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
diff --git a/quantum/rgb_matrix_animations/rainbow_beacon_anim.h b/quantum/rgb_matrix_animations/rainbow_beacon_anim.h
index 061cac837..f53c819a9 100644
--- a/quantum/rgb_matrix_animations/rainbow_beacon_anim.h
+++ b/quantum/rgb_matrix_animations/rainbow_beacon_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(RAINBOW_BEACON)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void RAINBOW_BEACON_math(HSV* hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
- hsv->h = ((g_led_config.point[i].y - k_rgb_matrix_center.y) * 2 * cos + (g_led_config.point[i].x - k_rgb_matrix_center.x) * 2 * sin) / 128 + rgb_matrix_config.hue;
+static HSV RAINBOW_BEACON_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
+ hsv.h += ((g_led_config.point[i].y - k_rgb_matrix_center.y) * 2 * cos + (g_led_config.point[i].x - k_rgb_matrix_center.x) * 2 * sin) / 128;
+ return hsv;
}
bool RAINBOW_BEACON(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/rainbow_moving_chevron_anim.h b/quantum/rgb_matrix_animations/rainbow_moving_chevron_anim.h
index f406566fa..e78c55e8d 100644
--- a/quantum/rgb_matrix_animations/rainbow_moving_chevron_anim.h
+++ b/quantum/rgb_matrix_animations/rainbow_moving_chevron_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(RAINBOW_MOVING_CHEVRON)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void RAINBOW_MOVING_CHEVRON_math(HSV* hsv, uint8_t i, uint8_t time) {
- hsv->h = abs8(g_led_config.point[i].y - k_rgb_matrix_center.y) + (g_led_config.point[i].x - time) + rgb_matrix_config.hue;
+static HSV RAINBOW_MOVING_CHEVRON_math(HSV hsv, uint8_t i, uint8_t time) {
+ hsv.h += abs8(g_led_config.point[i].y - k_rgb_matrix_center.y) + (g_led_config.point[i].x - time);
+ return hsv;
}
bool RAINBOW_MOVING_CHEVRON(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h b/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h
index f19e9116d..8298fec46 100644
--- a/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h
+++ b/quantum/rgb_matrix_animations/rainbow_pinwheels_anim.h
@@ -2,8 +2,9 @@
RGB_MATRIX_EFFECT(PINWHEELS)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void PINWHEELS_math(HSV* hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
- hsv->h = ((g_led_config.point[i].y - k_rgb_matrix_center.y) * 3 * cos + (56 - abs8(g_led_config.point[i].x - k_rgb_matrix_center.x)) * 3 * sin) / 128 + rgb_matrix_config.hue;
+static HSV PINWHEELS_math(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time) {
+ hsv.h += ((g_led_config.point[i].y - k_rgb_matrix_center.y) * 3 * cos + (56 - abs8(g_led_config.point[i].x - k_rgb_matrix_center.x)) * 3 * sin) / 128;
+ return hsv;
}
bool PINWHEELS(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/raindrops_anim.h b/quantum/rgb_matrix_animations/raindrops_anim.h
index 09d0d1df8..a4fed5165 100644
--- a/quantum/rgb_matrix_animations/raindrops_anim.h
+++ b/quantum/rgb_matrix_animations/raindrops_anim.h
@@ -4,17 +4,17 @@ RGB_MATRIX_EFFECT(RAINDROPS)
static void raindrops_set_color(int i, effect_params_t* params) {
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
- HSV hsv = { 0 , rgb_matrix_config.sat, rgb_matrix_config.val };
+ HSV hsv = { 0 , rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v };
// Take the shortest path between hues
- int16_t deltaH = ((rgb_matrix_config.hue + 180) % 360 - rgb_matrix_config.hue) / 4;
+ int16_t deltaH = ((rgb_matrix_config.hsv.h + 180) % 360 - rgb_matrix_config.hsv.h) / 4;
if (deltaH > 127) {
deltaH -= 256;
} else if (deltaH < -127) {
deltaH += 256;
}
- hsv.h = rgb_matrix_config.hue + (deltaH * (rand() & 0x03));
+ hsv.h = rgb_matrix_config.hsv.h + (deltaH * (rand() & 0x03));
RGB rgb = hsv_to_rgb(hsv);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
diff --git a/quantum/rgb_matrix_animations/solid_color_anim.h b/quantum/rgb_matrix_animations/solid_color_anim.h
index 937642559..6e4063803 100644
--- a/quantum/rgb_matrix_animations/solid_color_anim.h
+++ b/quantum/rgb_matrix_animations/solid_color_anim.h
@@ -4,8 +4,7 @@ RGB_MATRIX_EFFECT(SOLID_COLOR)
bool SOLID_COLOR(effect_params_t* params) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
- RGB rgb = hsv_to_rgb(hsv);
+ RGB rgb = hsv_to_rgb(rgb_matrix_config.hsv);
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
diff --git a/quantum/rgb_matrix_animations/solid_reactive_anim.h b/quantum/rgb_matrix_animations/solid_reactive_anim.h
index 762a95db3..dd49b6530 100644
--- a/quantum/rgb_matrix_animations/solid_reactive_anim.h
+++ b/quantum/rgb_matrix_animations/solid_reactive_anim.h
@@ -3,8 +3,9 @@
RGB_MATRIX_EFFECT(SOLID_REACTIVE)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void SOLID_REACTIVE_math(HSV* hsv, uint16_t offset) {
- hsv->h = rgb_matrix_config.hue + qsub8(130, offset);
+static HSV SOLID_REACTIVE_math(HSV hsv, uint16_t offset) {
+ hsv.h += qsub8(130, offset);
+ return hsv;
}
bool SOLID_REACTIVE(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/solid_reactive_cross.h b/quantum/rgb_matrix_animations/solid_reactive_cross.h
index 99f22c694..5b9cfcbd5 100644
--- a/quantum/rgb_matrix_animations/solid_reactive_cross.h
+++ b/quantum/rgb_matrix_animations/solid_reactive_cross.h
@@ -11,7 +11,7 @@ RGB_MATRIX_EFFECT(SOLID_REACTIVE_MULTICROSS)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void SOLID_REACTIVE_CROSS_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
+static HSV SOLID_REACTIVE_CROSS_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
uint16_t effect = tick + dist;
dx = dx < 0 ? dx * -1 : dx;
dy = dy < 0 ? dy * -1 : dy;
@@ -20,7 +20,8 @@ static void SOLID_REACTIVE_CROSS_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t
effect += dx > dy ? dy : dx;
if (effect > 255)
effect = 255;
- hsv->v = qadd8(hsv->v, 255 - effect);
+ hsv.v = qadd8(hsv.v, 255 - effect);
+ return hsv;
}
#ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
diff --git a/quantum/rgb_matrix_animations/solid_reactive_nexus.h b/quantum/rgb_matrix_animations/solid_reactive_nexus.h
index 8bebd042d..e90eaf4b2 100644
--- a/quantum/rgb_matrix_animations/solid_reactive_nexus.h
+++ b/quantum/rgb_matrix_animations/solid_reactive_nexus.h
@@ -11,7 +11,7 @@ RGB_MATRIX_EFFECT(SOLID_REACTIVE_MULTINEXUS)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void SOLID_REACTIVE_NEXUS_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
+static HSV SOLID_REACTIVE_NEXUS_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
uint16_t effect = tick - dist;
if (effect > 255)
effect = 255;
@@ -19,8 +19,9 @@ static void SOLID_REACTIVE_NEXUS_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t
effect = 255;
if ((dx > 8 || dx < -8) && (dy > 8 || dy < -8))
effect = 255;
- hsv->v = qadd8(hsv->v, 255 - effect);
- hsv->h = rgb_matrix_config.hue + dy / 4;
+ hsv.v = qadd8(hsv.v, 255 - effect);
+ hsv.h = rgb_matrix_config.hsv.h + dy / 4;
+ return hsv;
}
#ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
diff --git a/quantum/rgb_matrix_animations/solid_reactive_simple_anim.h b/quantum/rgb_matrix_animations/solid_reactive_simple_anim.h
index 36c6ec527..77c8ff672 100644
--- a/quantum/rgb_matrix_animations/solid_reactive_simple_anim.h
+++ b/quantum/rgb_matrix_animations/solid_reactive_simple_anim.h
@@ -3,8 +3,9 @@
RGB_MATRIX_EFFECT(SOLID_REACTIVE_SIMPLE)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void SOLID_REACTIVE_SIMPLE_math(HSV* hsv, uint16_t offset) {
- hsv->v = scale8(255 - offset, rgb_matrix_config.val);
+static HSV SOLID_REACTIVE_SIMPLE_math(HSV hsv, uint16_t offset) {
+ hsv.v = scale8(255 - offset, hsv.v);
+ return hsv;
}
bool SOLID_REACTIVE_SIMPLE(effect_params_t* params) {
diff --git a/quantum/rgb_matrix_animations/solid_reactive_wide.h b/quantum/rgb_matrix_animations/solid_reactive_wide.h
index 36edc475c..73779dfa7 100644
--- a/quantum/rgb_matrix_animations/solid_reactive_wide.h
+++ b/quantum/rgb_matrix_animations/solid_reactive_wide.h
@@ -11,11 +11,12 @@ RGB_MATRIX_EFFECT(SOLID_REACTIVE_MULTIWIDE)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void SOLID_REACTIVE_WIDE_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
+static HSV SOLID_REACTIVE_WIDE_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
uint16_t effect = tick + dist * 5;
if (effect > 255)
effect = 255;
- hsv->v = qadd8(hsv->v, 255 - effect);
+ hsv.v = qadd8(hsv.v, 255 - effect);
+ return hsv;
}
#ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
diff --git a/quantum/rgb_matrix_animations/solid_splash_anim.h b/quantum/rgb_matrix_animations/solid_splash_anim.h
index 84c99ff00..441f35576 100644
--- a/quantum/rgb_matrix_animations/solid_splash_anim.h
+++ b/quantum/rgb_matrix_animations/solid_splash_anim.h
@@ -11,11 +11,12 @@ RGB_MATRIX_EFFECT(SOLID_MULTISPLASH)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-void SOLID_SPLASH_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
+HSV SOLID_SPLASH_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
uint16_t effect = tick - dist;
if (effect > 255)
effect = 255;
- hsv->v = qadd8(hsv->v, 255 - effect);
+ hsv.v = qadd8(hsv.v, 255 - effect);
+ return hsv;
}
#ifndef DISABLE_RGB_MATRIX_SOLID_SPLASH
diff --git a/quantum/rgb_matrix_animations/splash_anim.h b/quantum/rgb_matrix_animations/splash_anim.h
index c4c051653..19ccb256e 100644
--- a/quantum/rgb_matrix_animations/splash_anim.h
+++ b/quantum/rgb_matrix_animations/splash_anim.h
@@ -11,12 +11,13 @@ RGB_MATRIX_EFFECT(MULTISPLASH)
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-void SPLASH_math(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
+HSV SPLASH_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
uint16_t effect = tick - dist;
- if (effect > 255)
+ if (effect > 255)
effect = 255;
- hsv->h += effect;
- hsv->v = qadd8(hsv->v, 255 - effect);
+ hsv.h += effect;
+ hsv.v = qadd8(hsv.v, 255 - effect);
+ return hsv;
}
#ifndef DISABLE_RGB_MATRIX_SPLASH
diff --git a/quantum/rgb_matrix_animations/typing_heatmap_anim.h b/quantum/rgb_matrix_animations/typing_heatmap_anim.h
index e6b34717b..374b7fea0 100644
--- a/quantum/rgb_matrix_animations/typing_heatmap_anim.h
+++ b/quantum/rgb_matrix_animations/typing_heatmap_anim.h
@@ -59,7 +59,7 @@ bool TYPING_HEATMAP(effect_params_t* params) {
if (!HAS_ANY_FLAGS(g_led_config.flags[led[j]], params->flags))
continue;
- HSV hsv = { 170 - qsub8(val, 85), rgb_matrix_config.sat, scale8((qadd8(170, val) - 170) * 3, rgb_matrix_config.val) };
+ HSV hsv = { 170 - qsub8(val, 85), rgb_matrix_config.hsv.s, scale8((qadd8(170, val) - 170) * 3, rgb_matrix_config.hsv.v) };
RGB rgb = hsv_to_rgb(hsv);
rgb_matrix_set_color(led[j], rgb.r, rgb.g, rgb.b);
}
diff --git a/quantum/rgb_matrix_runners/effect_runner_dx_dy.h b/quantum/rgb_matrix_runners/effect_runner_dx_dy.h
index 43312629d..9650c9a13 100644
--- a/quantum/rgb_matrix_runners/effect_runner_dx_dy.h
+++ b/quantum/rgb_matrix_runners/effect_runner_dx_dy.h
@@ -1,18 +1,16 @@
#pragma once
-typedef void (*dx_dy_f)(HSV* hsv, int16_t dx, int16_t dy, uint8_t time);
+typedef HSV (*dx_dy_f)(HSV hsv, int16_t dx, int16_t dy, uint8_t time);
bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
uint8_t time = scale16by8(g_rgb_counters.tick, rgb_matrix_config.speed / 2);
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
- effect_func(&hsv, dx, dy, time);
- RGB rgb = hsv_to_rgb(hsv);
+ RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time));
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
return led_max < DRIVER_LED_TOTAL;
diff --git a/quantum/rgb_matrix_runners/effect_runner_dx_dy_dist.h b/quantum/rgb_matrix_runners/effect_runner_dx_dy_dist.h
index a7310c853..eb0c4d8dd 100644
--- a/quantum/rgb_matrix_runners/effect_runner_dx_dy_dist.h
+++ b/quantum/rgb_matrix_runners/effect_runner_dx_dy_dist.h
@@ -1,19 +1,17 @@
#pragma once
-typedef void (*dx_dy_dist_f)(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time);
+typedef HSV (*dx_dy_dist_f)(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint8_t time);
bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
uint8_t time = scale16by8(g_rgb_counters.tick, rgb_matrix_config.speed / 2);
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
int16_t dx = g_led_config.point[i].x - k_rgb_matrix_center.x;
int16_t dy = g_led_config.point[i].y - k_rgb_matrix_center.y;
uint8_t dist = sqrt16(dx * dx + dy * dy);
- effect_func(&hsv, dx, dy, dist, time);
- RGB rgb = hsv_to_rgb(hsv);
+ RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time));
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
return led_max < DRIVER_LED_TOTAL;
diff --git a/quantum/rgb_matrix_runners/effect_runner_i.h b/quantum/rgb_matrix_runners/effect_runner_i.h
index 85405ba1b..d4a7ef392 100644
--- a/quantum/rgb_matrix_runners/effect_runner_i.h
+++ b/quantum/rgb_matrix_runners/effect_runner_i.h
@@ -1,16 +1,14 @@
#pragma once
-typedef void (*i_f)(HSV* hsv, uint8_t i, uint8_t time);
+typedef HSV (*i_f)(HSV hsv, uint8_t i, uint8_t time);
bool effect_runner_i(effect_params_t* params, i_f effect_func) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
uint8_t time = scale16by8(g_rgb_counters.tick, rgb_matrix_config.speed / 4);
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
- effect_func(&hsv, i, time);
- RGB rgb = hsv_to_rgb(hsv);
+ RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time));
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
return led_max < DRIVER_LED_TOTAL;
diff --git a/quantum/rgb_matrix_runners/effect_runner_reactive.h b/quantum/rgb_matrix_runners/effect_runner_reactive.h
index 94cd7d545..9da2814ce 100644
--- a/quantum/rgb_matrix_runners/effect_runner_reactive.h
+++ b/quantum/rgb_matrix_runners/effect_runner_reactive.h
@@ -2,12 +2,11 @@
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
-typedef void (*reactive_f)(HSV* hsv, uint16_t offset);
+typedef HSV (*reactive_f)(HSV hsv, uint16_t offset);
bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
uint16_t max_tick = 65535 / rgb_matrix_config.speed;
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
@@ -21,8 +20,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) {
}
uint16_t offset = scale16by8(tick, rgb_matrix_config.speed);
- effect_func(&hsv, offset);
- RGB rgb = hsv_to_rgb(hsv);
+ RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset));
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
return led_max < DRIVER_LED_TOTAL;
diff --git a/quantum/rgb_matrix_runners/effect_runner_reactive_splash.h b/quantum/rgb_matrix_runners/effect_runner_reactive_splash.h
index cb2b0d794..4f2059c99 100644
--- a/quantum/rgb_matrix_runners/effect_runner_reactive_splash.h
+++ b/quantum/rgb_matrix_runners/effect_runner_reactive_splash.h
@@ -2,25 +2,24 @@
#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
-typedef void (*reactive_splash_f)(HSV* hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick);
+typedef HSV (*reactive_splash_f)(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick);
bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, reactive_splash_f effect_func) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { 0, rgb_matrix_config.sat, 0 };
uint8_t count = g_last_hit_tracker.count;
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
- hsv.h = rgb_matrix_config.hue;
+ HSV hsv = rgb_matrix_config.hsv;
hsv.v = 0;
for (uint8_t j = start; j < count; j++) {
int16_t dx = g_led_config.point[i].x - g_last_hit_tracker.x[j];
int16_t dy = g_led_config.point[i].y - g_last_hit_tracker.y[j];
uint8_t dist = sqrt16(dx * dx + dy * dy);
uint16_t tick = scale16by8(g_last_hit_tracker.tick[j], rgb_matrix_config.speed);
- effect_func(&hsv, dx, dy, dist, tick);
+ hsv = effect_func(hsv, dx, dy, dist, tick);
}
- hsv.v = scale8(hsv.v, rgb_matrix_config.val);
+ hsv.v = scale8(hsv.v, rgb_matrix_config.hsv.v);
RGB rgb = hsv_to_rgb(hsv);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
diff --git a/quantum/rgb_matrix_runners/effect_runner_sin_cos_i.h b/quantum/rgb_matrix_runners/effect_runner_sin_cos_i.h
index 54e4c6d86..e68a7a968 100644
--- a/quantum/rgb_matrix_runners/effect_runner_sin_cos_i.h
+++ b/quantum/rgb_matrix_runners/effect_runner_sin_cos_i.h
@@ -1,18 +1,16 @@
#pragma once
-typedef void (*sin_cos_i_f)(HSV* hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time);
+typedef HSV (*sin_cos_i_f)(HSV hsv, int8_t sin, int8_t cos, uint8_t i, uint8_t time);
bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) {
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- HSV hsv = { rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val };
uint16_t time = scale16by8(g_rgb_counters.tick, rgb_matrix_config.speed / 4);
int8_t cos_value = cos8(time) - 128;
int8_t sin_value = sin8(time) - 128;
for (uint8_t i = led_min; i < led_max; i++) {
RGB_MATRIX_TEST_LED_FLAGS();
- effect_func(&hsv, cos_value, sin_value, i, time);
- RGB rgb = hsv_to_rgb(hsv);
+ RGB rgb = hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time));
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
return led_max < DRIVER_LED_TOTAL;
diff --git a/quantum/rgb_matrix_types.h b/quantum/rgb_matrix_types.h
index f890edd94..04a84f4ac 100644
--- a/quantum/rgb_matrix_types.h
+++ b/quantum/rgb_matrix_types.h
@@ -2,6 +2,7 @@
#include <stdint.h>
#include <stdbool.h>
+#include "color.h"
#if defined(__GNUC__)
#define PACKED __attribute__ ((__packed__))
@@ -81,10 +82,8 @@ typedef union {
struct PACKED {
uint8_t enable :2;
uint8_t mode :6;
- uint8_t hue :8;
- uint8_t sat :8;
- uint8_t val :8;
- uint8_t speed :8;//EECONFIG needs to be increased to support this
+ HSV hsv;
+ uint8_t speed; //EECONFIG needs to be increased to support this
};
} rgb_config_t;
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 75e4ef0d8..f569d6b9e 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -167,7 +167,6 @@ void eeconfig_update_rgblight(uint32_t val) {
}
void eeconfig_update_rgblight_default(void) {
- //dprintf("eeconfig_update_rgblight_default\n");
rgblight_config.enable = 1;
rgblight_config.mode = RGBLIGHT_MODE_STATIC_LIGHT;
rgblight_config.hue = 0;
@@ -179,7 +178,7 @@ void eeconfig_update_rgblight_default(void) {
}
void eeconfig_debug_rgblight(void) {
- dprintf("rgblight_config eprom\n");
+ dprintf("rgblight_config EEPROM:\n");
dprintf("rgblight_config.enable = %d\n", rgblight_config.enable);
dprintf("rghlight_config.mode = %d\n", rgblight_config.mode);
dprintf("rgblight_config.hue = %d\n", rgblight_config.hue);
@@ -308,9 +307,9 @@ void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom) {
RGBLIGHT_SPLIT_SET_CHANGE_MODE;
if (write_to_eeprom) {
eeconfig_update_rgblight(rgblight_config.raw);
- xprintf("rgblight mode [EEPROM]: %u\n", rgblight_config.mode);
+ dprintf("rgblight mode [EEPROM]: %u\n", rgblight_config.mode);
} else {
- xprintf("rgblight mode [NOEEPROM]: %u\n", rgblight_config.mode);
+ dprintf("rgblight mode [NOEEPROM]: %u\n", rgblight_config.mode);
}
if( is_static_effect(rgblight_config.mode) ) {
#ifdef RGBLIGHT_USE_TIMER
@@ -337,7 +336,7 @@ void rgblight_mode_noeeprom(uint8_t mode) {
void rgblight_toggle(void) {
- xprintf("rgblight toggle [EEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable);
+ dprintf("rgblight toggle [EEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable);
if (rgblight_config.enable) {
rgblight_disable();
}
@@ -347,7 +346,7 @@ void rgblight_toggle(void) {
}
void rgblight_toggle_noeeprom(void) {
- xprintf("rgblight toggle [NOEEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable);
+ dprintf("rgblight toggle [NOEEPROM]: rgblight_config.enable = %u\n", !rgblight_config.enable);
if (rgblight_config.enable) {
rgblight_disable_noeeprom();
}
@@ -360,20 +359,20 @@ void rgblight_enable(void) {
rgblight_config.enable = 1;
// No need to update EEPROM here. rgblight_mode() will do that, actually
//eeconfig_update_rgblight(rgblight_config.raw);
- xprintf("rgblight enable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
+ dprintf("rgblight enable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
rgblight_mode(rgblight_config.mode);
}
void rgblight_enable_noeeprom(void) {
rgblight_config.enable = 1;
- xprintf("rgblight enable [NOEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
+ dprintf("rgblight enable [NOEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
rgblight_mode_noeeprom(rgblight_config.mode);
}
void rgblight_disable(void) {
rgblight_config.enable = 0;
eeconfig_update_rgblight(rgblight_config.raw);
- xprintf("rgblight disable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
+ dprintf("rgblight disable [EEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
#ifdef RGBLIGHT_USE_TIMER
rgblight_timer_disable();
#endif
@@ -384,7 +383,7 @@ void rgblight_disable(void) {
void rgblight_disable_noeeprom(void) {
rgblight_config.enable = 0;
- xprintf("rgblight disable [noEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
+ dprintf("rgblight disable [NOEEPROM]: rgblight_config.enable = %u\n", rgblight_config.enable);
#ifdef RGBLIGHT_USE_TIMER
rgblight_timer_disable();
#endif
@@ -471,7 +470,6 @@ void rgblight_sethsv_noeeprom_old(uint8_t hue, uint8_t sat, uint8_t val) {
if (rgblight_config.enable) {
LED_TYPE tmp_led;
sethsv(hue, sat, val, &tmp_led);
- // dprintf("rgblight set hue [MEMORY]: %u,%u,%u\n", inmem_config.hue, inmem_config.sat, inmem_config.val);
rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b);
}
}
@@ -543,9 +541,9 @@ void rgblight_sethsv_eeprom_helper(uint8_t hue, uint8_t sat, uint8_t val, bool w
rgblight_config.val = val;
if (write_to_eeprom) {
eeconfig_update_rgblight(rgblight_config.raw);
- xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
+ dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
} else {
- xprintf("rgblight set hsv [NOEEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
+ dprintf("rgblight set hsv [NOEEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
}
}
}
@@ -866,7 +864,6 @@ void rgblight_task(void) {
uint16_t oldpos16;
if (tick_flag) {
tick_flag = false;
- //dprintf("rgblight animation tick\n");
if (timer_elapsed(report_last_timer) >= 30000) {
report_last_timer = timer_read();
dprintf("rgblight animation tick report to slave\n");
@@ -874,15 +871,11 @@ void rgblight_task(void) {
}
}
oldpos16 = animation_status.pos16;
- //dprintf("call effect function\n");
#endif
animation_status.last_timer += interval_time;
effect_func(&animation_status);
#if defined(RGBLIGHT_SPLIT) && !defined(RGBLIGHT_SPLIT_NO_ANIMATION_SYNC)
- //dprintf("pos16, oldpos16 = %d %d\n",
- // animation_status.pos16,oldpos16);
if (animation_status.pos16 == 0 && oldpos16 != 0) {
- //dprintf("flag on\n");
tick_flag = true;
}
#endif
diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c
index b32d48eb8..ba21d0c7b 100644
--- a/quantum/split_common/transport.c
+++ b/quantum/split_common/transport.c
@@ -17,6 +17,8 @@
#ifdef ENCODER_ENABLE
# include "encoder.h"
+static pin_t encoders_pad[] = ENCODERS_PAD_A;
+# define NUMBER_OF_ENCODERS (sizeof(encoders_pad)/sizeof(pin_t))
#endif
#if defined(USE_I2C) || defined(EH)
diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h
index c13784ba1..fc65bb597 100644
--- a/quantum/template/avr/config.h
+++ b/quantum/template/avr/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2019 %YOUR_NAME%
+Copyright %YEAR% %YOUR_NAME%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -91,8 +91,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* 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 */
diff --git a/quantum/template/avr/rules.mk b/quantum/template/avr/rules.mk
index 383a3594b..133c9e363 100644
--- a/quantum/template/avr/rules.mk
+++ b/quantum/template/avr/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -71,7 +70,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
diff --git a/quantum/template/avr/template.c b/quantum/template/avr/template.c
index 86dc69abc..e852a42c4 100644
--- a/quantum/template/avr/template.c
+++ b/quantum/template/avr/template.c
@@ -1,4 +1,4 @@
-/* Copyright 2019 %YOUR_NAME%
+/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/base/keymaps/default/config.h b/quantum/template/base/keymaps/default/config.h
index 44382016a..5b00c8956 100644
--- a/quantum/template/base/keymaps/default/config.h
+++ b/quantum/template/base/keymaps/default/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2019 %YOUR_NAME%
+/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/base/keymaps/default/keymap.c b/quantum/template/base/keymaps/default/keymap.c
index 482a44544..0e9fad357 100644
--- a/quantum/template/base/keymaps/default/keymap.c
+++ b/quantum/template/base/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-/* Copyright 2019 %YOUR_NAME%
+/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/base/template.h b/quantum/template/base/template.h
index 5b5076c47..2e531b1fd 100644
--- a/quantum/template/base/template.h
+++ b/quantum/template/base/template.h
@@ -1,4 +1,4 @@
-/* Copyright 2019 %YOUR_NAME%
+/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/ps2avrgb/config.h b/quantum/template/ps2avrgb/config.h
index d954fec96..320d71fcb 100644
--- a/quantum/template/ps2avrgb/config.h
+++ b/quantum/template/ps2avrgb/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright %YEAR% %YOUR_NAME%
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/ps2avrgb/rules.mk b/quantum/template/ps2avrgb/rules.mk
index bd0eed052..98a920e18 100644
--- a/quantum/template/ps2avrgb/rules.mk
+++ b/quantum/template/ps2avrgb/rules.mk
@@ -1,18 +1,3 @@
-# Copyright 2019 Luiz Ribeiro <luizribeiro@gmail.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
# MCU name
MCU = atmega32a
PROTOCOL = VUSB
diff --git a/quantum/template/ps2avrgb/template.c b/quantum/template/ps2avrgb/template.c
index 3f920de48..07f27bbb2 100644
--- a/quantum/template/ps2avrgb/template.c
+++ b/quantum/template/ps2avrgb/template.c
@@ -1,4 +1,4 @@
-/* Copyright 2019 %YOUR_NAME%
+/* Copyright %YEAR% %YOUR_NAME%
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/quantum/template/ps2avrgb/usbconfig.h b/quantum/template/ps2avrgb/usbconfig.h
index 54a7d20f1..465db3a13 100644
--- a/quantum/template/ps2avrgb/usbconfig.h
+++ b/quantum/template/ps2avrgb/usbconfig.h
@@ -1,13 +1,3 @@
-/* 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"
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 000000000..351dc2524
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,5 @@
+# Python requirements
+# milc FIXME(skullydazed): Included in the repo for now.
+argcomplete
+colorama
+#halo
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 000000000..528512ac6
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,330 @@
+# Python settings for QMK
+
+[yapf]
+# Align closing bracket with visual indentation.
+align_closing_bracket_with_visual_indent=True
+
+# Allow dictionary keys to exist on multiple lines. For example:
+#
+# x = {
+# ('this is the first element of a tuple',
+# 'this is the second element of a tuple'):
+# value,
+# }
+allow_multiline_dictionary_keys=False
+
+# Allow lambdas to be formatted on more than one line.
+allow_multiline_lambdas=False
+
+# Allow splitting before a default / named assignment in an argument list.
+allow_split_before_default_or_named_assigns=True
+
+# Allow splits before the dictionary value.
+allow_split_before_dict_value=True
+
+# Let spacing indicate operator precedence. For example:
+#
+# a = 1 * 2 + 3 / 4
+# b = 1 / 2 - 3 * 4
+# c = (1 + 2) * (3 - 4)
+# d = (1 - 2) / (3 + 4)
+# e = 1 * 2 - 3
+# f = 1 + 2 + 3 + 4
+#
+# will be formatted as follows to indicate precedence:
+#
+# a = 1*2 + 3/4
+# b = 1/2 - 3*4
+# c = (1+2) * (3-4)
+# d = (1-2) / (3+4)
+# e = 1*2 - 3
+# f = 1 + 2 + 3 + 4
+#
+arithmetic_precedence_indication=True
+
+# Number of blank lines surrounding top-level function and class
+# definitions.
+blank_lines_around_top_level_definition=2
+
+# Insert a blank line before a class-level docstring.
+blank_line_before_class_docstring=False
+
+# Insert a blank line before a module docstring.
+blank_line_before_module_docstring=False
+
+# Insert a blank line before a 'def' or 'class' immediately nested
+# within another 'def' or 'class'. For example:
+#
+# class Foo:
+# # <------ this blank line
+# def method():
+# ...
+blank_line_before_nested_class_or_def=False
+
+# Do not split consecutive brackets. Only relevant when
+# dedent_closing_brackets is set. For example:
+#
+# call_func_that_takes_a_dict(
+# {
+# 'key1': 'value1',
+# 'key2': 'value2',
+# }
+# )
+#
+# would reformat to:
+#
+# call_func_that_takes_a_dict({
+# 'key1': 'value1',
+# 'key2': 'value2',
+# })
+coalesce_brackets=True
+
+# The column limit.
+column_limit=256
+
+# The style for continuation alignment. Possible values are:
+#
+# - SPACE: Use spaces for continuation alignment. This is default behavior.
+# - FIXED: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns
+# (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs) for continuation
+# alignment.
+# - VALIGN-RIGHT: Vertically align continuation lines with indent
+# characters. Slightly right (one more indent character) if cannot
+# vertically align continuation lines with indent characters.
+#
+# For options FIXED, and VALIGN-RIGHT are only available when USE_TABS is
+# enabled.
+continuation_align_style=SPACE
+
+# Indent width used for line continuations.
+continuation_indent_width=4
+
+# Put closing brackets on a separate line, dedented, if the bracketed
+# expression can't fit in a single line. Applies to all kinds of brackets,
+# including function definitions and calls. For example:
+#
+# config = {
+# 'key1': 'value1',
+# 'key2': 'value2',
+# } # <--- this bracket is dedented and on a separate line
+#
+# time_series = self.remote_client.query_entity_counters(
+# entity='dev3246.region1',
+# key='dns.query_latency_tcp',
+# transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
+# start_ts=now()-timedelta(days=3),
+# end_ts=now(),
+# ) # <--- this bracket is dedented and on a separate line
+dedent_closing_brackets=True
+
+# Disable the heuristic which places each list element on a separate line
+# if the list is comma-terminated.
+disable_ending_comma_heuristic=False
+
+# Place each dictionary entry onto its own line.
+each_dict_entry_on_separate_line=True
+
+# The regex for an i18n comment. The presence of this comment stops
+# reformatting of that line, because the comments are required to be
+# next to the string they translate.
+i18n_comment=
+
+# The i18n function call names. The presence of this function stops
+# reformattting on that line, because the string it has cannot be moved
+# away from the i18n comment.
+i18n_function_call=
+
+# Indent blank lines.
+indent_blank_lines=False
+
+# Indent the dictionary value if it cannot fit on the same line as the
+# dictionary key. For example:
+#
+# config = {
+# 'key1':
+# 'value1',
+# 'key2': value1 +
+# value2,
+# }
+indent_dictionary_value=True
+
+# The number of columns to use for indentation.
+indent_width=4
+
+# Join short lines into one line. E.g., single line 'if' statements.
+join_multiple_lines=False
+
+# Do not include spaces around selected binary operators. For example:
+#
+# 1 + 2 * 3 - 4 / 5
+#
+# will be formatted as follows when configured with "*,/":
+#
+# 1 + 2*3 - 4/5
+no_spaces_around_selected_binary_operators=
+
+# Use spaces around default or named assigns.
+spaces_around_default_or_named_assign=False
+
+# Use spaces around the power operator.
+spaces_around_power_operator=False
+
+# The number of spaces required before a trailing comment.
+# This can be a single value (representing the number of spaces
+# before each trailing comment) or list of values (representing
+# alignment column values; trailing comments within a block will
+# be aligned to the first column value that is greater than the maximum
+# line length within the block). For example:
+#
+# With spaces_before_comment=5:
+#
+# 1 + 1 # Adding values
+#
+# will be formatted as:
+#
+# 1 + 1 # Adding values <-- 5 spaces between the end of the statement and comment
+#
+# With spaces_before_comment=15, 20:
+#
+# 1 + 1 # Adding values
+# two + two # More adding
+#
+# longer_statement # This is a longer statement
+# short # This is a shorter statement
+#
+# a_very_long_statement_that_extends_beyond_the_final_column # Comment
+# short # This is a shorter statement
+#
+# will be formatted as:
+#
+# 1 + 1 # Adding values <-- end of line comments in block aligned to col 15
+# two + two # More adding
+#
+# longer_statement # This is a longer statement <-- end of line comments in block aligned to col 20
+# short # This is a shorter statement
+#
+# a_very_long_statement_that_extends_beyond_the_final_column # Comment <-- the end of line comments are aligned based on the line length
+# short # This is a shorter statement
+#
+spaces_before_comment=2
+
+# Insert a space between the ending comma and closing bracket of a list,
+# etc.
+space_between_ending_comma_and_closing_bracket=False
+
+# Split before arguments
+split_all_comma_separated_values=False
+
+# Split before arguments if the argument list is terminated by a
+# comma.
+split_arguments_when_comma_terminated=True
+
+# Set to True to prefer splitting before '+', '-', '*', '/', '//', or '@'
+# rather than after.
+split_before_arithmetic_operator=False
+
+# Set to True to prefer splitting before '&', '|' or '^' rather than
+# after.
+split_before_bitwise_operator=True
+
+# Split before the closing bracket if a list or dict literal doesn't fit on
+# a single line.
+split_before_closing_bracket=True
+
+# Split before a dictionary or set generator (comp_for). For example, note
+# the split before the 'for':
+#
+# foo = {
+# variable: 'Hello world, have a nice day!'
+# for variable in bar if variable != 42
+# }
+split_before_dict_set_generator=True
+
+# Split before the '.' if we need to split a longer expression:
+#
+# foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d))
+#
+# would reformat to something like:
+#
+# foo = ('This is a really long string: {}, {}, {}, {}'
+# .format(a, b, c, d))
+split_before_dot=False
+
+# Split after the opening paren which surrounds an expression if it doesn't
+# fit on a single line.
+split_before_expression_after_opening_paren=False
+
+# If an argument / parameter list is going to be split, then split before
+# the first argument.
+split_before_first_argument=False
+
+# Set to True to prefer splitting before 'and' or 'or' rather than
+# after.
+split_before_logical_operator=False
+
+# Split named assignments onto individual lines.
+split_before_named_assigns=True
+
+# Set to True to split list comprehensions and generators that have
+# non-trivial expressions and multiple clauses before each of these
+# clauses. For example:
+#
+# result = [
+# a_long_var + 100 for a_long_var in xrange(1000)
+# if a_long_var % 10]
+#
+# would reformat to something like:
+#
+# result = [
+# a_long_var + 100
+# for a_long_var in xrange(1000)
+# if a_long_var % 10]
+split_complex_comprehension=True
+
+# The penalty for splitting right after the opening bracket.
+split_penalty_after_opening_bracket=300
+
+# The penalty for splitting the line after a unary operator.
+split_penalty_after_unary_operator=10000
+
+# The penalty of splitting the line around the '+', '-', '*', '/', '//',
+# ``%``, and '@' operators.
+split_penalty_arithmetic_operator=300
+
+# The penalty for splitting right before an if expression.
+split_penalty_before_if_expr=0
+
+# The penalty of splitting the line around the '&', '|', and '^'
+# operators.
+split_penalty_bitwise_operator=300
+
+# The penalty for splitting a list comprehension or generator
+# expression.
+split_penalty_comprehension=80
+
+# The penalty for characters over the column limit.
+split_penalty_excess_character=7000
+
+# The penalty incurred by adding a line split to the unwrapped line. The
+# more line splits added the higher the penalty.
+split_penalty_for_added_line_split=30
+
+# The penalty of splitting a list of "import as" names. For example:
+#
+# from a_very_long_or_indented_module_name_yada_yad import (long_argument_1,
+# long_argument_2,
+# long_argument_3)
+#
+# would reformat to something like:
+#
+# from a_very_long_or_indented_module_name_yada_yad import (
+# long_argument_1, long_argument_2, long_argument_3)
+split_penalty_import_names=0
+
+# The penalty of splitting the line around the 'and' and 'or'
+# operators.
+split_penalty_logical_operator=300
+
+# Use the Tab character for indentation.
+use_tabs=False
+
diff --git a/shell.nix b/shell.nix
index 6ff8a7ad2..e85221975 100644
--- a/shell.nix
+++ b/shell.nix
@@ -6,7 +6,10 @@ with pkgs;
let
avrbinutils = pkgsCross.avr.buildPackages.binutils;
avrlibc = pkgsCross.avr.libcCross;
- gcc-arm-embedded = pkgsCross.arm-embedded.buildPackages.gcc;
+ gcc-arm-embedded = (import (builtins.fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs-channels/archive/87f146a41c463a64c93022b11cf19716b3a22037.tar.gz";
+ sha256 = "0rk8haf19plw6vyvq0am99rik0hrrysknjw0f2vs7985awngy3q2";
+ }) {}).gcc-arm-embedded;
avr_incflags = [
"-isystem ${avrlibc}/avr/include"
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 6bf86d58a..5bfd5a9b0 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -245,6 +245,10 @@ avrdude-split-left: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
avrdude-split-right: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
$(call EXEC_AVRDUDE,eeprom-righthand.eep)
+usbasp: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
+ avrdude -p $(MCU) -c usbasp -U flash:w:$(BUILD_DIR)/$(TARGET).hex
+
+
# Convert hex to bin.
bin: $(BUILD_DIR)/$(TARGET).hex
$(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
@@ -306,7 +310,11 @@ extcoff: $(BUILD_DIR)/$(TARGET).elf
bootloader:
make -C lib/lufa/Bootloaders/DFU/ clean
$(TMK_DIR)/make_dfu_header.sh $(ALL_CONFIGS)
- make -C lib/lufa/Bootloaders/DFU/
+ $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) $(CFLAGS) $(OPT_DEFS) tmk_core/common/avr/bootloader_size.c 2> /dev/null | sed -ne '/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
+ $(eval PROGRAM_SIZE_KB=$(shell n=`expr $(MAX_SIZE) / 1024` && echo $$(($$n)) || echo 0))
+ $(eval BOOT_SECTION_SIZE_KB=$(shell n=`expr $(BOOTLOADER_SIZE) / 1024` && echo $$(($$n)) || echo 0))
+ $(eval FLASH_SIZE_KB=$(shell n=`expr $(PROGRAM_SIZE_KB) + $(BOOT_SECTION_SIZE_KB)` && echo $$(($$n)) || echo 0))
+ make -C lib/lufa/Bootloaders/DFU/ MCU=$(MCU) ARCH=$(ARCH) F_CPU=$(F_CPU) FLASH_SIZE_KB=$(FLASH_SIZE_KB) BOOT_SECTION_SIZE_KB=$(BOOT_SECTION_SIZE_KB)
printf "BootloaderDFU.hex copied to $(TARGET)_bootloader.hex\n"
cp lib/lufa/Bootloaders/DFU/BootloaderDFU.hex $(TARGET)_bootloader.hex
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk
index 11715cf34..4aebb4776 100644
--- a/tmk_core/chibios.mk
+++ b/tmk_core/chibios.mk
@@ -201,7 +201,6 @@ DFU_ARGS ?=
ifneq ("$(SERIAL)","")
DFU_ARGS += -S $(SERIAL)
endif
-DFU_SUFFIX_ARGS ?=
ST_LINK_ARGS ?=
@@ -209,7 +208,6 @@ ST_LINK_ARGS ?=
EXTRALIBDIRS = $(RULESPATH)/ld
DFU_UTIL ?= dfu-util
-DFU_SUFFIX ?= dfu-suffix
ST_LINK_CLI ?= st-link_cli
# Generate a .qmk for the QMK-FF
@@ -274,7 +272,3 @@ 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 ;\
- fi
- $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index 6a560229a..285786cb7 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -45,7 +45,7 @@ int retro_tapping_counter = 0;
#endif
#ifndef TAP_HOLD_CAPS_DELAY
-# define TAP_HOLD_CAPS_DELAY 200
+# define TAP_HOLD_CAPS_DELAY 80
#endif
/** \brief Called to execute an action.
*
diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c
index 3cdcd2e42..29036f7c5 100644
--- a/tmk_core/common/avr/bootloader.c
+++ b/tmk_core/common/avr/bootloader.c
@@ -65,6 +65,13 @@
#define BOOT_SIZE_1024 0b010
#define BOOT_SIZE_2048 0b000
+//compatibility between ATMega8 and ATMega88
+#if !defined (MCUCSR)
+ #if defined (MCUSR)
+ #define MCUCSR MCUSR
+ #endif
+#endif
+
/** \brief Entering the Bootloader via Software
*
* http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
@@ -149,6 +156,39 @@ void bootloader_jump(void) {
while(1) {} // wait for watchdog timer to trigger
+ #elif defined(BOOTLOADER_USBASP)
+ // Taken with permission of Stephan Baerwolf from https://github.com/tinyusbboard/API/blob/master/apipage.c
+ wdt_enable(WDTO_15MS);
+ wdt_reset();
+ asm volatile (
+ "cli \n\t"
+ "ldi r29 , %[ramendhi] \n\t"
+ "ldi r28 , %[ramendlo] \n\t"
+ #if (FLASHEND>131071)
+ "ldi r18 , %[bootaddrhi] \n\t"
+ "st Y+, r18 \n\t"
+ #endif
+ "ldi r18 , %[bootaddrme] \n\t"
+ "st Y+, r18 \n\t"
+ "ldi r18 , %[bootaddrlo] \n\t"
+ "st Y+, r18 \n\t"
+ "out %[mcucsrio], __zero_reg__ \n\t"
+ "bootloader_startup_loop%=: \n\t"
+ "rjmp bootloader_startup_loop%= \n\t"
+ :
+ : [mcucsrio] "I" (_SFR_IO_ADDR(MCUCSR)),
+ #if (FLASHEND>131071)
+ [ramendhi] "M" (((RAMEND - 2) >> 8) & 0xff),
+ [ramendlo] "M" (((RAMEND - 2) >> 0) & 0xff),
+ [bootaddrhi] "M" ((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >>16) & 0xff),
+ #else
+ [ramendhi] "M" (((RAMEND - 1) >> 8) & 0xff),
+ [ramendlo] "M" (((RAMEND - 1) >> 0) & 0xff),
+ #endif
+ [bootaddrme] "M" ((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 8) & 0xff),
+ [bootaddrlo] "M" ((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 0) & 0xff)
+ );
+
#else // Assume remaining boards are DFU, even if the flag isn't set
#if !(defined(__AVR_ATmega32A__) || defined(__AVR_ATmega328P__)) // no USB - maybe BOOTLOADER_BOOTLOADHID instead though?
@@ -172,24 +212,19 @@ void bootloader_jump(void) {
}
-#ifdef __AVR_ATmega32A__
- // MCUSR is actually called MCUCSR in ATmega32A
- #define MCUSR MCUCSR
-#endif
-
/* this runs before main() */
void bootloader_jump_after_watchdog_reset(void) __attribute__ ((used, naked, section (".init3")));
void bootloader_jump_after_watchdog_reset(void)
{
#ifndef BOOTLOADER_HALFKAY
- if ((MCUSR & (1<<WDRF)) && reset_key == BOOTLOADER_RESET_KEY) {
+ if ((MCUCSR & (1<<WDRF)) && reset_key == BOOTLOADER_RESET_KEY) {
reset_key = 0;
// My custom USBasploader requires this to come up.
- MCUSR = 0;
+ MCUCSR = 0;
// Seems like Teensy halfkay loader requires clearing WDRF and disabling watchdog.
- MCUSR &= ~(1<<WDRF);
+ MCUCSR &= ~(1<<WDRF);
wdt_disable();
@@ -202,29 +237,3 @@ void bootloader_jump_after_watchdog_reset(void)
}
#endif
}
-
-
-#if 0
- /*
- * USBaspLoader - I'm not sure if this is used at all in any projects
- * would love to support it if it is -Jack
- */
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
- // This makes custom USBasploader come up.
- MCUSR = 0;
-
- // initialize ports
- PORTB = 0; PORTC= 0; PORTD = 0;
- DDRB = 0; DDRC= 0; DDRD = 0;
-
- // disable interrupts
- EIMSK = 0; EECR = 0; SPCR = 0;
- ACSR = 0; SPMCSR = 0; WDTCSR = 0; PCICR = 0;
- TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0;
- ADCSRA = 0; TWCR = 0; UCSR0B = 0;
-#endif
-
- // This is compled into 'icall', address should be in word unit, not byte.
- ((void (*)(void))(BOOTLOADER_START/2))();
-}
-#endif
diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c
index 8ddacd98b..c0e9fb5ee 100644
--- a/tmk_core/common/backlight.c
+++ b/tmk_core/common/backlight.c
@@ -100,7 +100,7 @@ void backlight_enable(void)
backlight_set(backlight_config.level);
}
-/** /brief Disable backlight
+/** \brief Disable backlight
*
* FIXME: needs doc
*/
@@ -162,3 +162,56 @@ uint8_t get_backlight_level(void)
{
return backlight_config.level;
}
+
+#ifdef BACKLIGHT_BREATHING
+/** \brief Backlight breathing toggle
+ *
+ * FIXME: needs doc
+ */
+void backlight_toggle_breathing(void)
+{
+ bool breathing = backlight_config.breathing;
+ dprintf("backlight breathing toggle: %u\n", breathing);
+ if (breathing)
+ backlight_disable_breathing();
+ else
+ backlight_enable_breathing();
+}
+
+/** \brief Enable backlight breathing
+ *
+ * FIXME: needs doc
+ */
+void backlight_enable_breathing(void)
+{
+ if (backlight_config.breathing) return; // do nothing if breathing is already on
+
+ backlight_config.breathing = true;
+ eeconfig_update_backlight(backlight_config.raw);
+ dprintf("backlight breathing enable\n");
+ breathing_enable();
+}
+
+/** \brief Disable backlight breathing
+ *
+ * FIXME: needs doc
+ */
+void backlight_disable_breathing(void)
+{
+ if (!backlight_config.breathing) return; // do nothing if breathing is already off
+
+ backlight_config.breathing = false;
+ eeconfig_update_backlight(backlight_config.raw);
+ dprintf("backlight breathing disable\n");
+ breathing_disable();
+}
+
+/** \brief Get the backlight breathing status
+ *
+ * FIXME: needs doc
+ */
+bool is_backlight_breathing(void)
+{
+ return backlight_config.breathing;
+}
+#endif
diff --git a/tmk_core/common/backlight.h b/tmk_core/common/backlight.h
index 420c9d19e..0a3877120 100644
--- a/tmk_core/common/backlight.h
+++ b/tmk_core/common/backlight.h
@@ -20,11 +20,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include <stdbool.h>
+#ifndef BACKLIGHT_LEVELS
+ #define BACKLIGHT_LEVELS 3
+#elif BACKLIGHT_LEVELS > 31
+ #error "Maximum value of BACKLIGHT_LEVELS is 31"
+#endif
+
typedef union {
uint8_t raw;
struct {
- bool enable :1;
- uint8_t level :7;
+ bool enable :1;
+ bool breathing :1;
+ uint8_t reserved :1; // Reserved for possible future backlight modes
+ uint8_t level :5;
};
} backlight_config_t;
@@ -40,3 +48,11 @@ void backlight_set(uint8_t level);
void backlight_level(uint8_t level);
uint8_t get_backlight_level(void);
+#ifdef BACKLIGHT_BREATHING
+void backlight_toggle_breathing(void);
+void backlight_enable_breathing(void);
+void backlight_disable_breathing(void);
+bool is_backlight_breathing(void);
+void breathing_enable(void);
+void breathing_disable(void);
+#endif
diff --git a/tmk_core/common/eeconfig.c b/tmk_core/common/eeconfig.c
index 30dc7a48d..4f440abc9 100644
--- a/tmk_core/common/eeconfig.c
+++ b/tmk_core/common/eeconfig.c
@@ -47,9 +47,8 @@ void eeconfig_init_quantum(void) {
eeprom_update_byte(EECONFIG_STENOMODE, 0);
eeprom_update_dword(EECONFIG_HAPTIC, 0);
eeprom_update_byte(EECONFIG_VELOCIKEY, 0);
-#ifdef EECONFIG_RGB_MATRIX
eeprom_update_dword(EECONFIG_RGB_MATRIX, 0);
-#endif
+ eeprom_update_byte(EECONFIG_RGB_MATRIX_SPEED, 0);
eeconfig_init_kb();
}
diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h
index 0ac3dff07..3100041b4 100644
--- a/tmk_core/common/eeconfig.h
+++ b/tmk_core/common/eeconfig.h
@@ -37,12 +37,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define EECONFIG_UNICODEMODE (uint8_t *)12
#define EECONFIG_STENOMODE (uint8_t *)13
// EEHANDS for two handed boards
-#define EECONFIG_HANDEDNESS (uint8_t *)14
+#define EECONFIG_HANDEDNESS (uint8_t *)14
#define EECONFIG_KEYBOARD (uint32_t *)15
#define EECONFIG_USER (uint32_t *)19
#define EECONFIG_VELOCIKEY (uint8_t *)23
-#define EECONFIG_HAPTIC (uint32_t*)24
+#define EECONFIG_HAPTIC (uint32_t *)24
+#define EECONFIG_RGB_MATRIX (uint32_t *)28
+#define EECONFIG_RGB_MATRIX_SPEED (uint8_t *)32
/* debug bit */
#define EECONFIG_DEBUG_ENABLE (1<<0)
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index 6d2bb51f0..e51dbfe7c 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -223,6 +223,10 @@ $(foreach LOBJ, $(NO_LTO_OBJ), $(eval $(call NO_LTO,$(LOBJ))))
MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
+# Add QMK specific flags
+DFU_SUFFIX ?= dfu-suffix
+DFU_SUFFIX_ARGS ?=
+
elf: $(BUILD_DIR)/$(TARGET).elf
hex: $(BUILD_DIR)/$(TARGET).hex
@@ -279,6 +283,10 @@ gccversion :
@$(SILENT) || printf "$(MSG_BIN) $@" | $(AWK_CMD)
$(eval CMD=$(BIN) $< $@ || exit 0)
@$(BUILD_CMD)
+ if [ ! -z "$(DFU_SUFFIX_ARGS)" ]; then \
+ $(DFU_SUFFIX) $(DFU_SUFFIX_ARGS) -a $(BUILD_DIR)/$(TARGET).bin 1>/dev/null ;\
+ fi
+ $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
BEGIN = gccversion sizebefore
@@ -382,6 +390,9 @@ show_path:
@echo SRC=$(SRC)
@echo OBJ=$(OBJ)
+objs-size:
+ for i in $(OBJ); do echo $$i; done | sort | xargs $(SIZE)
+
ifeq ($(findstring avr-gcc,$(CC)),avr-gcc)
SIZE_MARGIN = 1024
@@ -390,6 +401,7 @@ check-size:
$(eval CURRENT_SIZE=$(shell if [ -f $(BUILD_DIR)/$(TARGET).hex ]; then $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(AWK) 'NR==2 {print $$4}'; else printf 0; fi))
$(eval FREE_SIZE=$(shell expr $(MAX_SIZE) - $(CURRENT_SIZE)))
$(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE)))
+ $(eval PERCENT_SIZE=$(shell expr $(CURRENT_SIZE) \* 100 / $(MAX_SIZE)))
if [ $(MAX_SIZE) -gt 0 ] && [ $(CURRENT_SIZE) -gt 0 ]; then \
$(SILENT) || printf "$(MSG_CHECK_FILESIZE)" | $(AWK_CMD); \
if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then \
@@ -404,7 +416,7 @@ check-size:
fi
else
check-size:
- echo "(Firmware size check does not yet support $(MCU) microprocessors; skipping.)"
+ $(SILENT) || echo "(Firmware size check does not yet support $(MCU) microprocessors; skipping.)"
endif
# Create build directory
diff --git a/users/konstantin/config.h b/users/konstantin/config.h
index 4ca19f824..4edab2baa 100644
--- a/users/konstantin/config.h
+++ b/users/konstantin/config.h
@@ -14,8 +14,9 @@
#define NO_ACTION_ONESHOT
#define PERMISSIVE_HOLD
-#define TAPPING_TERM 200
-#define TAPPING_TOGGLE 2
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+#define TAP_HOLD_CAPS_DELAY 50
#define UNICODE_CYCLE_PERSIST false
#define UNICODE_SELECTED_MODES UC_WINC, UC_WIN, UC_LNX
diff --git a/users/konstantin/rgb.c b/users/konstantin/rgb.c
index 0f0c73c49..a96cad019 100644
--- a/users/konstantin/rgb.c
+++ b/users/konstantin/rgb.c
@@ -1,24 +1,25 @@
#include "rgb.h"
#ifdef RGBLIGHT_EFFECT_BREATHING
-const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {20, 30, 5, 10};
+const uint8_t PROGMEM RGBLED_BREATHING_INTERVALS[] = { 20, 30, 5, 10 };
#endif
#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD
-const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {20, 50, 100};
+const uint8_t PROGMEM RGBLED_RAINBOW_MOOD_INTERVALS[] = { 20, 50, 100 };
#endif
#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL
-const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 50, 100};
+const uint8_t PROGMEM RGBLED_RAINBOW_SWIRL_INTERVALS[] = { 20, 50, 100 };
#endif
#ifdef RGBLIGHT_EFFECT_SNAKE
-const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {20, 50, 100};
+const uint8_t PROGMEM RGBLED_SNAKE_INTERVALS[] = { 20, 50, 100 };
#endif
#ifdef RGBLIGHT_EFFECT_KNIGHT
-const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {20, 50, 100};
+const uint8_t PROGMEM RGBLED_KNIGHT_INTERVALS[] = { 20, 50, 100 };
#endif
-const hsv_t GODSPEED_BLUE = { .h = 280, .s = 68, .v = RGBLIGHT_LIMIT_VAL };
-const hsv_t GODSPEED_YELLOW = { .h = 38, .s = 153, .v = RGBLIGHT_LIMIT_VAL };
+const HSV GODSPEED_BLUE = { .h = 198, .s = 68, .v = 255 };
+const HSV GODSPEED_YELLOW = { .h = 27, .s = 153, .v = 255 };
+const HSV MODERN_DOLCH_RED = { .h = 252, .s = 255, .v = 144 };
diff --git a/users/konstantin/rgb.h b/users/konstantin/rgb.h
index aed855aa0..36a9d9cd7 100644
--- a/users/konstantin/rgb.h
+++ b/users/konstantin/rgb.h
@@ -2,17 +2,6 @@
#include "quantum.h"
-typedef struct {
- uint16_t h; // 0–360
- uint8_t s; // 0–255
- uint8_t v; // 0–255
-} hsv_t;
-
-typedef struct {
- uint8_t r; // 0–255
- uint8_t g; // 0–255
- uint8_t b; // 0–255
-} rgb_t;
-
-extern const hsv_t GODSPEED_BLUE;
-extern const hsv_t GODSPEED_YELLOW;
+extern const HSV GODSPEED_BLUE;
+extern const HSV GODSPEED_YELLOW;
+extern const HSV MODERN_DOLCH_RED;
diff --git a/users/konstantin/tap_dance.c b/users/konstantin/tap_dance.c
index fa43288ce..ba1453fc0 100644
--- a/users/konstantin/tap_dance.c
+++ b/users/konstantin/tap_dance.c
@@ -110,6 +110,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
[TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_LALT),
[TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI),
[TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT),
+ [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RSFT, KC_RCTL),
[TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN),
[TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN),
diff --git a/users/konstantin/tap_dance.h b/users/konstantin/tap_dance.h
index 13d682a60..d2f00c8cb 100644
--- a/users/konstantin/tap_dance.h
+++ b/users/konstantin/tap_dance.h
@@ -7,6 +7,7 @@
#define RAL_LAL TD(TD_RAL_LAL)
#define RAL_RGU TD(TD_RAL_RGU)
#define RCT_RSF TD(TD_RCT_RSF)
+#define RSF_RCT TD(TD_RSF_RCT)
#define LSFT_FN TD(TD_LSFT_FN)
#define RCTL_FN TD(TD_RCTL_FN)
@@ -18,6 +19,7 @@ enum tap_dance {
TD_RAL_LAL,
TD_RAL_RGU,
TD_RCT_RSF,
+ TD_RSF_RCT,
TD_LSFT_FN,
TD_RCTL_FN,
diff --git a/users/mattly/config.h b/users/mattly/config.h
new file mode 100644
index 000000000..25d379801
--- /dev/null
+++ b/users/mattly/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+#define TAPPING_TOGGLE 2
+#define TAPPING_TERM 200
diff --git a/users/mattly/mattly.c b/users/mattly/mattly.c
new file mode 100644
index 000000000..1e61e0126
--- /dev/null
+++ b/users/mattly/mattly.c
@@ -0,0 +1,70 @@
+#include "mattly.h"
+
+__attribute__ ((weak))
+layer_state_t layer_state_set_keymap (layer_state_t state) {
+ return state;
+}
+
+void set_lights_default(void) {
+ #ifdef RGBLIGHT_ENABLE
+ if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
+ rgblight_sethsv_noeeprom(HSV_CAPS);
+ } else {
+ rgblight_sethsv_noeeprom(HSV_DEFAULT);
+ }
+ #endif
+}
+
+void layer_state_set_rgb(layer_state_t state) {
+#ifdef RGBLIGHT_ENABLE
+ switch (biton32(state)) {
+ case _QWERTY:
+ set_lights_default();
+ break;
+ case _SYMBOL:
+ rgblight_sethsv_noeeprom(HSV_SYMBOL);
+ break;
+ case _NAVNUM:
+ rgblight_sethsv_noeeprom(HSV_NAVNUM);
+ break;
+ case _FUNCT:
+ rgblight_sethsv_noeeprom(HSV_FUNCT);
+ break;
+ }
+#endif
+}
+
+
+layer_state_t layer_state_set_user (layer_state_t state) {
+ state = update_tri_layer_state(state, _SYMBOL, _NAVNUM, _FUNCT);
+ layer_state_set_rgb(state);
+ return layer_state_set_keymap (state);
+}
+
+void on_reset(void) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_sethsv_noeeprom(HSV_RESET);
+ #endif
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_CAPS:
+ #ifdef RGBLIGHT_ENABLE
+ set_lights_default();
+ #endif
+ return true;
+ case RESET:
+ on_reset();
+ return true;
+ default:
+ return true;
+ }
+}
+
+void keyboard_post_init_user(void) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable_noeeprom();
+ set_lights_default();
+#endif
+}
diff --git a/users/mattly/mattly.h b/users/mattly/mattly.h
new file mode 100644
index 000000000..08318840d
--- /dev/null
+++ b/users/mattly/mattly.h
@@ -0,0 +1,83 @@
+/* Copyright 2019 Matthew Lyon
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef USERSPACE
+#define USERSPACE
+
+#include "quantum.h"
+
+enum {
+ _QWERTY,
+ _NAVNUM,
+ _SYMBOL,
+ _FUNCT,
+};
+
+// left hand
+#define ESC_HYP MT(MOD_HYPR, KC_ESC)
+#define BSP_NUM LT(_NAVNUM, KC_BSPC)
+#define ENT_SFT MT(MOD_LSFT, KC_ENT)
+#define SPC_SFT MT(MOD_LSFT, KC_SPC)
+
+// right hand
+#define SPC_SFT MT(MOD_LSFT, KC_SPC)
+#define TAB_SYM LT(_SYMBOL, KC_TAB)
+#define DEL_WRP MT(MOD_LCTL | MOD_LALT | MOD_LGUI, KC_DEL)
+
+#define NAVLOCK TG(_NAVNUM)
+#define SYMLOCK TG(_SYMBOL)
+
+
+// QWERTY
+
+#define A_CTRL MT(MOD_LCTL, KC_A)
+#define S_ALT MT(MOD_LALT, KC_S)
+#define D_GUI MT(MOD_LGUI, KC_D)
+#define F_SHFT MT(MOD_LSFT, KC_F)
+#define J_SHFT MT(MOD_RSFT, KC_J)
+#define K_GUI MT(MOD_RGUI, KC_K)
+#define L_ALT MT(MOD_RALT, KC_L)
+#define MINSCTL MT(MOD_RCTL, KC_MINS)
+
+#define BWORD LALT(KC_LEFT)
+#define FWORD LALT(KC_RIGHT)
+
+// OS X default keys
+#define NWIN LGUI(KC_GRV) // Next Window
+#define PWIN LGUI(LSFT(KC_GRV)) // Prev Window
+#define NTAB LGUI(LSFT(KC_RBRC)) // Next Tab
+#define PTAB LGUI(LSFT(KC_LBRC)) // Prev Tab
+#define NAVBACK LGUI(KC_LBRC) // Navigate Forward
+#define NAVFWD LGUI(KC_RBRC) // Navigate Back
+
+// my personal mappings to window manager commands
+#define XALLWIN HYPR(KC_F14)
+#define XDESKTP HYPR(KC_F15)
+#define XNXTSPC HYPR(KC_F16)
+#define XPRVSPC HYPR(KC_F17)
+#define XNOTIFY HYPR(KC_F18)
+
+#ifdef RGBLIGHT_ENABLE
+#define HSV_CAPS 42, 255, 255
+#define HSV_DEFAULT 30, 218, 255
+#define HSV_SYMBOL 22, 255, 255
+#define HSV_NAVNUM 245, 200, 255
+#define HSV_FUNCT 233, 255, 255
+#define HSV_RESET 180, 255, 255
+#endif
+
+#endif
+
diff --git a/users/mattly/readme.md b/users/mattly/readme.md
new file mode 100644
index 000000000..356992534
--- /dev/null
+++ b/users/mattly/readme.md
@@ -0,0 +1,10 @@
+# mattly's layouts
+
+My layouts are based around:
+
+* making the most from small layouts on keyboards like the iris or planck
+* moving held-modifiers from pinkies to thumbs or home row, giving many keys dual purposes via mod/layer taps
+* easy home-row navigation on a layer, using standard keys, available to all programs, not just a specially-configured editor
+* easy access to punctuation symbols used in the programming languages I work in
+
+[Here is an image](https://lyonheart.us/etc/mattly-keymap.png) with an outdated description of my keymap \ No newline at end of file
diff --git a/users/mattly/rules.mk b/users/mattly/rules.mk
new file mode 100644
index 000000000..6803d361d
--- /dev/null
+++ b/users/mattly/rules.mk
@@ -0,0 +1,2 @@
+SRC += mattly.c
+MOUSEKEY_ENABLE = yes
diff --git a/users/xulkal/custom_oled.c b/users/xulkal/custom_oled.c
index d871e96f0..7280ef701 100644
--- a/users/xulkal/custom_oled.c
+++ b/users/xulkal/custom_oled.c
@@ -80,7 +80,7 @@ static void render_status(void)
oled_set_cursor(0, oled_max_lines() - 7);
oled_write_P(PSTR("-----"), false);
static char buffer[26] = {0};
- snprintf(buffer, sizeof(buffer), "h%3d s%3d v%3d s%3d m%3d\n", rgb_matrix_config.hue, rgb_matrix_config.sat, rgb_matrix_config.val, rgb_matrix_config.speed, rgb_matrix_config.mode);
+ snprintf(buffer, sizeof(buffer), "h%3d s%3d v%3d s%3d m%3d\n", rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v, rgb_matrix_config.speed, rgb_matrix_config.mode);
oled_write(buffer, false);
#elif defined(RGBLIGHT_ENABLE)
oled_set_cursor(0, oled_max_lines() - 7);
@@ -137,7 +137,7 @@ static void render_status(void)
#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);
+ snprintf(buffer, sizeof(buffer), " h%3d s%3d v%3d\n", rgb_matrix_config.hsv.h, rgb_matrix_config.hsv.s, rgb_matrix_config.hsv.v);
oled_write(buffer, false);
#elif defined(RGBLIGHT_ENABLE)
static char buffer[20] = {0};
diff --git a/users/xulkal/process_records.c b/users/xulkal/process_records.c
index 115623caa..2c5d2a4e7 100644
--- a/users/xulkal/process_records.c
+++ b/users/xulkal/process_records.c
@@ -2,10 +2,6 @@
#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)
{
diff --git a/util/docker_build.sh b/util/docker_build.sh
index c573ebcae..6feeb1f5d 100755
--- a/util/docker_build.sh
+++ b/util/docker_build.sh
@@ -46,5 +46,5 @@ fi
dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows
# Run container and build firmware
-docker run --rm -it $usb_args -v "$dir":/qmk_firmware qmkfm/qmk_firmware \
+docker run --rm -it $usb_args -w /qmk_firmware/ -v "$dir":/qmk_firmware qmkfm/base_container \
make "$keyboard${keymap:+:$keymap}${target:+:$target}"
diff --git a/util/freebsd_install.sh b/util/freebsd_install.sh
index c8696e8cc..815759203 100755
--- a/util/freebsd_install.sh
+++ b/util/freebsd_install.sh
@@ -1,4 +1,5 @@
#!/bin/sh
+util_dir=$(dirname "$0")
pkg update
pkg install -y \
git \
@@ -17,3 +18,4 @@ pkg install -y \
arm-none-eabi-newlib \
diffutils \
python3
+pip3 install -r ${util_dir}/../requirements.txt
diff --git a/util/linux_install.sh b/util/linux_install.sh
index efb2ee774..d21cd3c1c 100755
--- a/util/linux_install.sh
+++ b/util/linux_install.sh
@@ -2,12 +2,14 @@
# Note: This file uses tabs to indent. Please don't mix tabs and spaces.
-GENTOO_WARNING="This script will make a USE change in order to ensure that that QMK works on your system. All changes will be sent to the the file /etc/portage/package.use/qmk_firmware -- please review it, and read Portage's output carefully before installing any packages on your system. You will also need to ensure that your kernel is compiled with support for the keyboard chip that you are using (e.g. enable Arduino for the Pro Micro). Further information can be found on the Gentoo wiki."
+GENTOO_WARNING="This script will make a USE change in order to ensure that that QMK works on your system. All changes will be sent to the the file /etc/portage/package.use/qmkfirmware -- please review it, and read Portage's output carefully before installing any packages on your system. You will also need to ensure that your kernel is compiled with support for the keyboard chip that you are using (e.g. enable Arduino for the Pro Micro). Further information can be found on the Gentoo wiki."
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"
+util_dir=$(dirname "$0")
+
if grep ID /etc/os-release | grep -qE "fedora"; then
sudo dnf install \
arm-none-eabi-binutils-cs \
@@ -118,7 +120,7 @@ elif grep ID /etc/os-release | grep -q sabayon; then
elif grep ID /etc/os-release | grep -qE "opensuse|tumbleweed"; then
CROSS_AVR_GCC=cross-avr-gcc8
CROSS_ARM_GCC=cross-arm-none-gcc8
- if grep ID /etc/os-release | grep -q "15.0"; then
+ if grep ID /etc/os-release | grep -q "15."; then
CROSS_AVR_GCC=cross-avr-gcc7
CROSS_ARM_GCC=cross-arm-none-gcc7
fi
@@ -183,3 +185,6 @@ else
echo
echo "https://docs.qmk.fm/#/contributing"
fi
+
+# Global install tasks
+pip3 install -r ${util_dir}/../requirements.txt
diff --git a/util/macos_install.sh b/util/macos_install.sh
index 915ff3143..f7e304424 100755
--- a/util/macos_install.sh
+++ b/util/macos_install.sh
@@ -1,5 +1,7 @@
#!/bin/bash
+util_dir=$(dirname "$0")
+
if ! brew --version 2>&1 > /dev/null; then
echo "Error! Homebrew not installed or broken!"
echo -n "Would you like to install homebrew now? [y/n] "
@@ -24,3 +26,4 @@ brew tap PX4/homebrew-px4
brew update
brew install avr-gcc@8 gcc-arm-none-eabi dfu-programmer avrdude dfu-util python3
brew link --force avr-gcc@8
+pip3 install -r ${util_dir}/../requirements.txt
diff --git a/util/msys2_install.sh b/util/msys2_install.sh
index bcb628ab2..bed176da6 100755
--- a/util/msys2_install.sh
+++ b/util/msys2_install.sh
@@ -5,6 +5,7 @@ download_dir=~/qmk_utils
avrtools=avr8-gnu-toolchain
armtools=gcc-arm-none-eabi
installflip=false
+util_dir=$(dirname "$0")
echo "Installing dependencies needed for the installation (quazip)"
pacman --needed -S base-devel mingw-w64-x86_64-toolchain msys/git msys/p7zip msys/python3 msys/unzip
@@ -92,6 +93,8 @@ else
fi
popd
+pip3 install -r ${util_dir}/../requirements.txt
+
cp -f "$dir/activate_msys2.sh" "$download_dir/"
if grep "^source ~/qmk_utils/activate_msys2.sh$" ~/.bashrc
diff --git a/util/new_keyboard.sh b/util/new_keyboard.sh
index e9ce30978..35d89e402 100755
--- a/util/new_keyboard.sh
+++ b/util/new_keyboard.sh
@@ -70,6 +70,18 @@ replace_placeholders() {
echo " done"
}
+# Replace %YEAR% with the current year.
+replace_year_placeholders() {
+ local replace_year_filenames=(
+ "${keyboard_dir}/config.h"
+ "${keyboard_dir}/${keyboard_name}.c"
+ "${keyboard_dir}/${keyboard_name}.h"
+ "${keyboard_dir}/keymaps/default/config.h"
+ "${keyboard_dir}/keymaps/default/keymap.c"
+ )
+ replace_placeholders "%YEAR%" "$(date +%Y)" "${replace_year_filenames[@]}"
+}
+
# Replace %KEYBOARD% with the keyboard name.
replace_keyboard_placeholders() {
local replace_keyboard_filenames=(
@@ -149,6 +161,7 @@ echo
copy_templates
set_sed_i
+replace_year_placeholders
replace_keyboard_placeholders
[ -n "$username" ] && replace_name_placeholders
diff --git a/util/travis_build.sh b/util/travis_build.sh
index 554ec8b68..fd5511a72 100755
--- a/util/travis_build.sh
+++ b/util/travis_build.sh
@@ -3,7 +3,7 @@
# 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 "$@"
+ docker run --rm -e MAKEFLAGS="$MAKEFLAGS" -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container make "$@"
}
fi
diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh
index 25ed83fb0..04021ae7c 100755
--- a/util/travis_compiled_push.sh
+++ b/util/travis_compiled_push.sh
@@ -29,8 +29,7 @@ NEFM=$(git diff --name-only -n 1 ${TRAVIS_COMMIT_RANGE} | grep -Ev '^(keyboards/
if [[ $NEFM -gt 0 ]] ; then
echo "Essential files modified."
git fetch --tags
- #lasttag=$(git describe --tags $(git rev-list --tags --max-count=10) | grep -Ev '\-' | xargs -I@ git log --format=format:"%ai @%n" -1 @ | sort -V | awk '{print $4}' | tail -1)
- lasttag=$(git describe --tags $(git rev-list --tags --max-count=10) | grep -Ev '\-' | sort -V | tail -1)
+ lasttag=$(git tag --sort=-creatordate --no-column --list '*.*.*' | grep -E -m1 '^[0-9]+\.[0-9]+\.[0-9]+$')
newtag=$(increment_version $lasttag)
until git tag $newtag; do
newtag=$(increment_version $newtag)
diff --git a/util/travis_test.sh b/util/travis_test.sh
index 3be4afff7..e6a50ac16 100644
--- a/util/travis_test.sh
+++ b/util/travis_test.sh
@@ -22,7 +22,7 @@ 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 "$@"
+ docker run --rm -e MAKEFLAGS="$MAKEFLAGS" -w /qmk_firmware/ -v "$PWD":/qmk_firmware --user $(id -u):$(id -g) qmkfm/base_container make "$@"
}
fi
diff --git a/util/vagrant/Dockerfile b/util/vagrant/Dockerfile
new file mode 100644
index 000000000..1936ee023
--- /dev/null
+++ b/util/vagrant/Dockerfile
@@ -0,0 +1,33 @@
+FROM qmkfm/base_container
+
+# Basic upgrades; install sudo and SSH.
+RUN apt-get update && apt-get install --no-install-recommends -y \
+ sudo \
+ openssh-server \
+ && rm -rf /var/lib/apt/lists/*
+RUN mkdir /var/run/sshd
+RUN sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
+RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
+
+# Remove the policy file once we're finished installing software.
+# This allows invoke-rc.d and friends to work as expected.
+RUN rm /usr/sbin/policy-rc.d
+
+# Add the Vagrant user and necessary passwords.
+RUN groupadd vagrant
+RUN useradd -c "Vagrant" -g vagrant -d /home/vagrant -m -s /bin/bash vagrant
+RUN echo 'root:vagrant' | chpasswd
+RUN echo 'vagrant:vagrant' | chpasswd
+
+# Allow the vagrant user to use sudo without a password.
+RUN echo 'vagrant ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/vagrant
+
+# Install Vagrant's insecure public key so provisioning and 'vagrant ssh' work.
+RUN mkdir /home/vagrant/.ssh
+ADD https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub /home/vagrant/.ssh/authorized_keys
+RUN chmod 0600 /home/vagrant/.ssh/authorized_keys
+RUN chown -R vagrant:vagrant /home/vagrant/.ssh
+RUN chmod 0700 /home/vagrant/.ssh
+
+EXPOSE 22
+CMD ["/usr/sbin/sshd", "-D"]
diff --git a/util/vagrant/readme.md b/util/vagrant/readme.md
new file mode 100644
index 000000000..e4b870a64
--- /dev/null
+++ b/util/vagrant/readme.md
@@ -0,0 +1,12 @@
+# QMK Vagrant Utilities
+
+## Dockerfile
+Vagrant-friendly `qmkfm/base_container`.
+
+In order for the Docker provider and `vagrant ssh` to function the container has a few extra requirements.
+
+* vagrant user
+* ssh server
+ * configured with expected public key
+* sudo
+ * passwordless for vagrant user
diff --git a/util/wsl_install.sh b/util/wsl_install.sh
index c2c206d2b..197d9f089 100755
--- a/util/wsl_install.sh
+++ b/util/wsl_install.sh
@@ -1,6 +1,7 @@
#!/bin/bash
-dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
+util_dir=$(dirname "$0")
+dir=$(cd -P -- "$util_dir" && pwd -P)
pushd "$dir";
if [[ $dir != /mnt/* ]];
@@ -28,6 +29,8 @@ download_dir=wsl_downloaded
source "$dir/win_shared_install.sh"
+pip3 install -r ${util_dir}/../requirements.txt
+
pushd "$download_dir"
while true; do
echo